2015-03-12 2 views
0

У меня есть приложение с NavigationDrawer.Изменить список элементов списка NavigationDrawer

Я загружаю фрагмент из фрагмента (через событие onClick кнопки), но я не могу найти, как изменить выбор пункта ListView навигационного устройства, соответствующего фрагменту.

I судимого сделать:

  final View navigationView = inflater.inflate(R.layout.fragment_navigation_drawer,container,false); 

      ListView lista = (ListView) navigationView.findViewById(R.id.listMenu); 

      lista.setFocusable(true); 
      lista.setFocusableInTouchMode(true); 
      lista.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
      lista.performItemClick(lista, 2, lista.getItemIdAtPosition(2)); 
      lista.setItemChecked(2,true); 
      lista.setSelection(2); 
      lista.requestFocus(); 

... после FragmentTransaction фиксации(), но ListView выбранного элемента не меняется.

Есть ли способ изменить выбранный товар по коду?

или

Есть ли способ, чтобы вызвать щелчок в ListView из NavigationDrawer так onNavigationDrawerItemSelected может быть выполнена?

Спасибо!

решаемые изменения доступности для общественности ListView mDrawerListView в NavigationDrawerFragment класса. Extendend объяснение в ответ на нижней

+0

Это может помочь. Пожалуйста, посмотрите http://stackoverflow.com/a/12744151/4651112 – nuuneoi

ответ

0

решаемых

Наконец, я нашел способ для выбора элемента из NavigationDrawer кода.

Ключ к классу NavigationDrawerFragment. Существует ListView mDrawerListView, который определяется как закрытый. Ему нужно только изменить доступность для общественности.

Затем на кнопку личного ("найти", в моем случае), есть 2 способа:

1.Доступ к ListView из NavigationDrawer и выполнить процедуру setItemChecked (целое положение, логическое значение):

MainActivity.mNavigationDrawerFragment.mDrawerListView.setItemChecked(1, true); 

2. Доступ к ListView из NavigationDrawer и выполнить щелчок исполняющий функцию performItemClick (View вид, ИНТ положение, долго ID):

MainActivity.mNavigationDrawerFragment.mDrawerListView.performItemClick(rootView.findViewById(R.id.navigation_drawer),1,0); 

Лично я предпочитаю 2-й путь, потому что есть код для загрузки фрагмента на события NavigationDrawer.onNavigationDrawerItemSelected (INT положение), нужно это только нажать кнопку и ничего звонить perfor mItemClick

Надеюсь, что это поможет другим кодам;)

0

хорошо, я сделать что-то подобное, я выбрать элемент из моей ListView, и отправить строку на другой вид деятельности, и сделать что-то в зависимости от строки:

mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     mDrawerList.setAdapter(new CustomAdapter(this, prgmNameList, prgmImages)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView parent, View view, int position, long id) { 
     selectItem(position);//element's position 
     Intent intent; 
     int CodigoPeticion=0; 
     String num =""; 
     switch(position){ //depending of which position is, do something 
      case 0: 
       intent = new Intent(Dos.this, MainActivity.class); num="cero"; intent.putExtra("po", num); 
       CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break; 

      case 1: //Toast.makeText(getApplicationContext(), "UNO", Toast.LENGTH_LONG).show(); 
       intent = new Intent(Dos.this, Uno.class); num="uno"; intent.putExtra("po", num); 
       CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break; 

      case 2: //Toast.makeText(getApplicationContext(), "DOS", Toast.LENGTH_LONG).show(); 
       intent = new Intent(Dos.this, Dos.class); num="dos"; intent.putExtra("po", num); 
       CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break; 

      default: intent = new Intent(Dos.this, Uno.class); num="default"; intent.putExtra("po", num); 
       CodigoPeticion=2; startActivityForResult (intent,CodigoPeticion); finish(); break; 
     } 
    } 
} 

сделать что-то с этим пунктом на следующей деятельности (или же, как у меня XD), например, на OnCreate должна быть:

Bundle extras = getIntent().getExtras(); 
    if (extras!= null) { 
     num =extras.getString("po"); //get the string DrawerItemClickListener 
    } 

    if(num.equals("cero")){ 
     Toast.makeText(getBaseContext(), "0", Toast.LENGTH_LONG).show(); nombre="Digimon"; 
    }else if(num.equals("uno")){ 
     Toast.makeText(getBaseContext(), "1", Toast.LENGTH_LONG).show(); nombre="Kaminomi"; 
     //Toast.makeText(getBaseContext(), Nombres, Toast.LENGTH_LONG).show(); 
    }else if(num.equals("dos")){ 
     Toast.makeText(getBaseContext(), "2", Toast.LENGTH_LONG).show(); nombre="nisekoi"; 
    }else { 
     Toast.makeText(getBaseContext(), "default "+num, Toast.LENGTH_LONG).show(); testme.setEnabled(false); 
    } 

надежду, что эта помощь, увидимся!

0

Спасибо всем. Примеры обогащают.

Однако мое намерение состоит в том, чтобы выделить пункт NavigationDrawer, не используя палец, р

Я изменил основную раму (другой фрагмент) на кнопке (не щелкая пункт), но по-прежнему выделен предыдущий элемент, когда он снова показывает навигатор.

Поэтому мне нужно выделить правильный элемент по коду ... если это возможно, или, возможно, есть способ вызвать щелчок на NavigationDrawer, я не знаю.

Смежные вопросы