1

ListFragmentを含むタブを作成しようとしています。私はいくつかの異なるアプローチを試しましたが、どちらも機能しません。ListFragmentオブジェクトのコンテナを適切に設定する方法がわかりません。これがJavaコードです。

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>

読んでいただきありがとうございます、どんな助けでもありがたいです!

4

1 に答える 1

0

1)FragmentManagerオブジェクトを作成します。

2)このオブジェクトのメソッドを使用して、 FragmentTransactionbeginTransaction()オブジェクトを作成します。

add(int containerViewId, Fragment fragment, String tag)3)オブジェクトのメソッドでフラグメントを追加しFragmentTransactionます。

このメソッドでは、コンテナーのID、新しいListFragment(または作成したクラス)、およびタグ(ListFragment必要に応じて簡単に参照を取得するため)への参照を配置します。

xmlレイアウトを変更する必要があることに注意してください。FrameLayoutIDを使用してを追加できます。次に、このIDをオブジェクトのメソッドadd()に指定しますFragmentTransaction

編集

コードの例:

パブリッククラスContentActivityはActivity{を拡張します

  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>
于 2013-03-18T18:49:29.330 に答える