2017-02-22 18 views
0

У меня возникли проблемы при добавлении элементов в навигационном ящик динамически, я разрешил часть добавления элементов, как этогоКак добавить элемент щелкает динамически на панели навигации

`for(int i = 0; i<lista.size(); i++){ 
      SubMenu menuGroup = menu.addSubMenu(Menu.NONE, i, Menu.NONE, lista.get(i)); 
      for(int j = 0; j<5; j++){ 
       menuGroup.add(item + j); 
      }` 

проблемы здесь:

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_manage) { 
     // Handle the camera action 
     //here comes the action for the first item 

    } else if (id == R.id.item_2) { 
     //here comes the action for item 2 and so on 

Так дело в том, что когда-то я создал элементы динамически (уже сделано, что), как я могу добавить запись кликов (действия для элементов, уже созданных). Я пробовал цикл for, но из-за его условия if-else if я не могу использовать цикл for. Может ли кто-нибудь мне помочь?

ответ

0

Я столкнулся с той же проблемой, прежде чем и решается с этим способом

  1. создать один фрагмент с расслоением и его расположение
  2. создать метод в MainActivity.java
  3. вызов, метод в onNavigationItemSelected

после добавления FrameLayout в content_main.xml с идентификатором frag_layout, я сделал следующие шаги:

FragDetail.java

public class FragDetail extends Fragment { 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.frag_detail, container, false); 

    Bundle bundle = getArguments(); 

    if(bundle != null) { 

     TextView mText = (TextView) view.findViewById(R.id.txt_detail); 
     mText.setText(bundle.getString("drawer_title")); 
    } 

    return view; 
}} 

frag_detail.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 
<TextView 
    android:text="detail clicked" 
    android:layout_width="wrap_content" 
    android:textAppearance="@style/TextAppearance.AppCompat.Headline" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/txt_detail" /></RelativeLayout> 

метод MainActivity.java

public FragDetail getFragment(String desc) { 

    FragDetail frag = new FragDetail(); 

    Bundle bundle = new Bundle(); 
    bundle.putString("drawer_title", desc); 

    frag.setArguments(bundle); 

    return frag; 
} 

вызова метода

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    String nmClient = (String) item.getTitle(); 

    Fragment frag = getFragment(nmClient); 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 

    ft.replace(R.id.frag_layout, frag); 
    ft.commit(); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

я действительно нашел решение от этого link

+0

благодаря спариванию, я, наконец, сделал это с onNavigationItemSelected, потому что все элементы делают то же самое, единственное отличие это имя, это было не так сложно, как я думал, , но ваш пример пригодится для другого проекта. – Alan