在NavigationDrawer
Android Studio 模板中,我已将菜单替换为 Expandable RecyclerView,现在我想添加一个事件OnClick
以更改主要内容中的片段。我已经有了精心制作的菜单;我不知道在哪里为每个片段更改添加事务。我在网上没有找到类似的例子,在某些情况下他们是用敬酒来做的。例如,我有两个名为:Biblioteca
和Evu
. 下面是我的项目的代码。
public class MenuAdapter extends ExpandableRecyclerViewAdapter<MenuCategoriaViewHolder, ItemMenuViewHolder> implements View.OnClickListener {
private View.OnClickListener 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);
}
@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());
}
@Override
public void onBindGroupViewHolder(MenuCategoriaViewHolder holder, int flatPosition, ExpandableGroup group) {
holder.setCategoriaName(group.getTitle());
}
public void setOnClickListener(View.OnClickListener listener){
this.listener=listener;
}
@Override
public void onClick(View view) {
if (listener!=null){
listener.onClick(view);
}
}
}
在MainActivity
其中MenuRecyclerView
:
public class MainActivity extends AppCompatActivity {
//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);
//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);
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));
}
@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);
}
}
查看持有人
public class ItemMenuViewHolder extends ChildViewHolder {
private TextView itemName;
private ImageView icono;
public ItemMenuViewHolder(View itemView) {
super(itemView);
itemName = (TextView)itemView.findViewById(R.id.list_item_name);
icono = (ImageView)itemView.findViewById(R.id.list_item_scate_icon);
}
public void setItemName(String name){
itemName.setText(name);
}
public void setIcono(int idResource){
icono.setImageResource(idResource);
}
}
我要给出的答案与我在这个问题中给出的答案几乎相同,不同之处在于,在这个问题中,类
ViewHolder
是在适配器外部声明的,这就是为什么你必须传递在adapter 作为其构造函数中的参数,以便能够捕获按下RecyclerView
.要实现您想要的,您必须:
OnClickListener
在 ViewHolder 类中实现接口。onClick()
OnClickListener接口方法。setOnClickListener()
你在适配器中声明的方法。菜单适配器
ItemMenuViewHolder
主要活动