2014-01-03 4 views
0

Я использую библиотеки «Action bar Sherlock» и «SlidingMenu». У меня есть список из 5 элементов, я хочу изменить фрагменты, щелкнув элемент из списка. Вот мой код до сих пор, я пытаюсь использовать OnListItemClick, но я действительно не знаю, как его использовать.OnListItemНажмите, чтобы открыть новый фрагмент

public class RandomList extends SherlockListFragment { 

    String[] list_contents = {"Page 1", "Page 2", "Page 3", "Page 4", "Page 5" }; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     // return super.onCreateView(inflater, container, savedInstanceState); 
     return inflater.inflate(R.layout.list, container, false); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(getActivity(), 
         android.R.layout.simple_list_item_1, list_contents)); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 

     // **Open different fragment after click** 
    } 
} 

ответ

3

Если один из вашего fragments (давайте назовем его MyFragment) коррелирует с первым пунктом в вашем SlidingMenu:

public class MyFragment extends Fragment { 

    public static Fragment newInstance(...) { 
     MyFragment f = new MyFragment(); 
     // Since fragments require that you have a 
     // public constructor with zero arguments, then 
     // we use this pattern to initialize the fragment. 
     ... 
     return f; 
    } 
    ... 
} 

Вы можете использовать переключатель заявление:

void callFragmentFromDrawer(int position) { 
    Fragment f = null; 
    switch (position) { 
     case 0: 
      f = MyFragment.newInstance(); 
      break; 
     case 1: 
     ... 
    } 

    if (f != null) { 
     getActivity().getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.content_frame, f) 
      .addToBackStack(list_contents[position]) 
      .commit(); 
    } 
} 

Тогда,

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    callFragmentFromDrawer(position); 
} 
+1

Это prett y много, как автор SlidingMenu сделал это в демонстрационном приложении, хотя ваше решение на самом деле немного чище. Я думаю, что для этого нужен getActivity() и литье, хотя и получить FM. –

+0

О, право. Я забыл, что мы были в ListFragment: -P Обновлен, чтобы отразить этот факт, вызвав getActivity() перед getSupportFragmentManager(). – iamreptar

+0

Извините, где находится MyFragment из этой строки f = MyFragment.newInstance(); Спасибо! –

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