2013-03-18 2 views
1

ListFragment가 포함 된 탭을 만들려고합니다. 나는 여러 가지 다른 시도를 시도했지만 그 중 어느 것도 작동하지 않습니다. 컨테이너를 ListFragment obkect에 올바르게 설정하는 방법을 모르겠습니다. 여기에 자바 코드가 있습니다.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) FragmentTransaction 개체에 add(int containerViewId, Fragment fragment, String tag) 메서드를 사용하여 조각을 추가합니다.

이 방법에서는 컨테이너의 ID 인 ListFragment (또는 작성한 클래스)과 태그 (필요한 경우 ListFragment을 쉽게 참조 할 수 있음)에 대한 참조를 넣습니다.

xml 레이아웃을 변경해야합니다. ID가 FrameLayout 인 사용자를 추가 할 수 있습니다. 그런 다음이 ID를 FragmentTransaction 오브젝트의 add() 메소드에 제공하십시오. 코드의

편집

예 :

공용 클래스 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

ListView에 FrameLayout 예제를 줄 수 있습니까? –

+0

도움 주셔서 대단히 감사합니다! :) –

+0

두 번째 탭으로 전환하면이 문제가 발생합니다. ( http://s018.radikal.ru/i528/1303/0d/8eeb9e964cab.jpg –

관련 문제