2013-03-18 4 views
1

Я пытаюсь создать вкладки с ListFragment в нем. Я пробовал несколько разных приемов, но ни один из них не работает. Я не знаю, как правильно установить контейнер для ListFragment obkect. Вот код Java.Как правильно настроить ListFragment?

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     ActionBar.Tab tabOne = actionBar.newTab().setText("ONE"); 
     ActionBar.Tab tabTwo = actionBar.newTab().setText("TWO"); 

     tabParkCinema.setTabListener(new tabListener()); 
     tab28Cinema.setTabListener(new tabListener()); 

     actionBar.addTab(tabOne); 
     actionBar.addTab(tabTwo); 

     } 

    protected class tabListener implements ActionBar.TabListener { 

     ParkFragment firstFragment; 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      switch (tab.getPosition()){ 
      case 0: 
       if (firstFragment == null){ 
        firstFragment = new ParkFragment(); 
        System.out.println("initialized"); 
        ft.add(R.id.cont, firstFragment,"FIRST"); 
       } 
       else{ 
        ft.attach(firstFragment); 
       } 
       break; 

      case 1: 
       if (firstFragment == null){ 
        firstFragment = new ParkFragment(); 
        ft.add(R.id.cont,firstFragment,"SECOND"); 
       } 
       else{ 
        ft.attach(firstFragment); 
       } 
       break; 
      } 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 

     } 
    }; 

    public class ParkFragment extends ListFragment { 
     private ArrayList<Cinemas> cinema; 
     private CinemasAdapter cinemaAdapter; 
     private View v; 
     //private ListView list; 

      @Override 
      public View onCreateView(LayoutInflater in, ViewGroup gr, Bundle savedInstanceState) { 
      v = in.inflate(R.id.listing1, gr,false); 
      super.onActivityCreated(savedInstanceState); 
      cinema = new Handler().handle(); 
      cinemaAdapter = new CinemasAdapter(MainActivity.this, R.layout.movie_data_row, cinema); 
      setListAdapter(cinemaAdapter); 
      return gr; 
      } 

      @Override 
      public void onListItemClick(ListView l, View v, int position, long id) { 
       Cinemas movie = cinemaAdapter.getItem(position); 
       Intent intent = new Intent (MainActivity.this, More.class); 
       intent.putExtra("Cinemas", movie); 
       intent.putExtra("data", movie.getBitmap()); 

       Bundle translateBundle = 
         ActivityOptions.makeCustomAnimation(MainActivity.this, 
         R.anim.slide_in_left, R.anim.slide_out_left).toBundle(); 
       startActivity (intent, translateBundle); 

      } 
     } 
} 

И activity_main.XML файл:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/cont" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 
      <ListView 
       android:id = "@+id/listing1" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" >  
     </ListView> 
</LinearLayout> 

Спасибо за чтение, любая помощь будет оценен по достоинству!

ответ

0

1) Создайте объект FragmentManager.

2) Используйте метод beginTransaction() на этом объекте, чтобы создать объект FragmentTransaction.

3) Добавить фрагмент по методу add(int containerViewId, Fragment fragment, String tag) на объект FragmentTransaction.

В этом методе вы помещаете ссылку на идентификатор контейнера, новый ListFragment (или класс, который вы создали) и тег (чтобы легко получить ссылку на ListFragment, если необходимо).

Обратите внимание, что вам нужно изменить свой xml-макет. Вы можете добавить FrameLayout с идентификатором. И затем, дайте этот идентификатор методу add() вашего FragmentTransaction объекта.

EDIT

Пример кода:

общественный класс ContentActivity расширяет активность {

public void onCreate(Bundle savedInstanceState) { 

    //your action bar stuff 

    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.parkfragment, new ParkFragment(), "locations"); 
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    fragmentTransaction.commit(); 
} 

public class ParkFragment extends ListFragment { 
    //your methods 
} 

protected class tabListener implements ActionBar.TabListener { 
    //your methods 
} 
} 

Ваш XML будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:baselineAligned="false" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/parkfragment" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 


</LinearLayout> 
+0

Вы могли бы привести пример FrameLayout для ListView? –

+0

Большое спасибо за помощь! :) –

+0

После перехода на вторую вкладку это происходит :( http://s018.radikal.ru/i528/1303/0d/8eeb9e964cab.jpg –

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