I'm trying to put OnClickListener events to the items in a recyclerview, already in the previous question have oriented me with these steps , however I think that something is not right in the creation of the interface since it is giving me two errors in the MainActivity. below the codes, thanks for the help:
MenuAdapter
public class MenuAdapter extends
ExpandableRecyclerViewAdapter<MenuCategoriaViewHolder, ItemMenuViewHolder>{
EventoOnItemClick listener;
public MenuAdapter(List<? extends ExpandableGroup> groups) {
super(groups);
}
@Override
public MenuCategoriaViewHolder onCreateGroupViewHolder(ViewGroup parent, int
viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_categoria, parent, false);
return new MenuCategoriaViewHolder(view);
}
@Override
public ItemMenuViewHolder onCreateChildViewHolder(ViewGroup parent, int
viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_subcategoria, parent, false);
//view.setOnClickListener(this);
return new ItemMenuViewHolder(view, listener);
}
@Override
public void onBindChildViewHolder(ItemMenuViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) {
ItemMenu itemMenu = (ItemMenu) group.getItems().get(childIndex);
holder.setItemName(itemMenu.getItemName());
holder.setIcono(itemMenu.getImagenId());
holder.setPosicion(childIndex);
}
public void setOnClickListener(EventoOnItemClick listener){
this.listener=listener;
}
@Override
public void onBindGroupViewHolder(MenuCategoriaViewHolder holder, int
flatPosition, ExpandableGroup group) {
holder.setCategoriaName(group.getTitle());
}
}
ItemMenuViewHolder
public class ItemMenuViewHolder extends ChildViewHolder implements View.OnClickListener{
EventoOnItemClick listener; // Recibe la interfaz enviada desde el adaptador
int posicion; // Recibe la posicion enviada desde le adaptador
private TextView itemName;
private ImageView icono;
public ItemMenuViewHolder(View itemView, EventoOnItemClick listener) {
super(itemView);
itemName = (TextView)itemView.findViewById(R.id.list_item_name);
icono = (ImageView)itemView.findViewById(R.id.list_item_scate_icon);
// Apuntas el evento onClick del item al metodo onClick
// de la interfaz OnClickListener.
itemView.setOnClickListener(this);
// Inicializas el listener
this.listener = this.listener;
}
public void setItemName(String name){
itemName.setText(name);
}
public void setIcono(int idResource){
icono.setImageResource(idResource);
}
public void setPosicion(int posicion) {
this.posicion = posicion; // Inicializa la posicion
}
@Override
public void onClick(View view) {
listener.onItemClick(posicion);
}
}
MainActivity
public class MainActivity extends AppCompatActivity
implements Fragment_biblioteca.OnFragmentInteractionListener {
//variables recyclerview
private RecyclerView mRecyclerView;
private MenuAdapter mAdapter;
private List<MenuCategoria> menuCategorias;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final Fragment biblioteca = new Fragment_biblioteca();
//RecyclerView en el navigationDrawer
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
getCateg();
mAdapter = new MenuAdapter(menuCategorias);
mRecyclerView.setLayoutManager(new
LinearLayoutManager(MainActivity.this));
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnClickListener(new MenuAdapter.EventoOnItemClick() {
FragmentManager fragmentManager = getFragmentManager();
@Override
public void onItemClick(int posicion) {
switch (posicion) {
case 1:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_main, biblioteca).commit();
// Aqui colocas el codigo para lanzar el fragmento
cuando se precione
// el primer item del ExpandableRecyclerViewAdapter
break;
case 2:
// Aqui colocas el codigo para lanzar el fragmento
cuando se precione
// el segundo item del ExpandableRecyclerViewAdapter
break;
case 3:
// Aqui colocas el codigo para lanzar el fragmento
cuando se precione
// el tercer item del ExpandableRecyclerViewAdapter
break;
}
}
});
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
}
public void getCateg() {
menuCategorias = new ArrayList<>(1);
List<ItemMenu> itemMenus = new ArrayList<>(5);
itemMenus.add(new ItemMenu("Home",R.mipmap.home)); // comentarié los
demás submenus para ensayar solo con uno
itemMenus.add(new ItemMenu("Biblioteca",R.mipmap.biblioteca));
itemMenus.add(new ItemMenu("EduVirtual",R.mipmap.eduvirtual));
itemMenus.add(new ItemMenu("Directorio",R.mipmap.directorio));
itemMenus.add(new ItemMenu("Preguntas",R.mipmap.preguntasf));
menuCategorias.add(new MenuCategoria("Portal", itemMenus));
/*
itemMenus = new ArrayList<>(2);
itemMenus.add(new ItemMenu("Siga"));
itemMenus.add(new ItemMenu("Apoyo a la Presencialidad"));
itemMenus.add(new ItemMenu("Virtualidad"));
menuCategorias.add(new MenuCategoria("Plataformas", itemMenus));
itemMenus = new ArrayList<>(7);
itemMenus.add(new ItemMenu("Facebook"));
itemMenus.add(new ItemMenu("Twitter"));
itemMenus.add(new ItemMenu("Linkedin"));
itemMenus.add(new ItemMenu("Flicker"));
itemMenus.add(new ItemMenu("Youtube"));
itemMenus.add(new ItemMenu("Google +"));
itemMenus.add(new ItemMenu("Instagram"));
menuCategorias.add(new MenuCategoria("Redes Sociales", itemMenus));
*/
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
The errors he shows me in Code Analysis are:
The interface: EventoOnItemClick
public interface EventoOnItemClick {
public void onItemClick(int posicion);
}