2

タブに ListView を表示したい (このタブを選択した後、ListView を表示したい) ため、Fragment クラスを作成し、その中に ListView コードを配置しました。主な問題は、フラグメント オブジェクトを tabListener に渡すことです。ここに例を投稿するか、コードでそれを行う方法をさらによく示してください。とにかく、どんな助けでも大歓迎です。

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");


        tabOne.setTabListener(new tabListener());
        tabTwo.setTabListener(new tabListener());

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


    protected class tabListener implements ActionBar.TabListener {

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

        }

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

        }

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

        }
    };

    public class FirstFragment extends ListFragment {
        private ArrayList<Cinemas> cinema;
        private CinemasAdapter cinemaAdapter;
        private ListView list;

          @Override
          public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            cinema = new Handler().handle(); 
            cinemaAdapter = new CinemasAdapter(MainActivity.this, R.layout.movie_data_row, cinema);
            setListAdapter(cinemaAdapter);
          }

          @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);
          }
        } 

}
4

2 に答える 2

3

多くの場合、タブを使用してアクティビティを作成する場合、タブコンテンツ用に個別のアクティビティを作成するのは簡単です。
ただし、これらのアクティビティが相互に作用する必要がある場合は、注意が必要です。

したがって、解決策は、タブコンテンツとして(アクティビティではなく)ビューを使用してタブアクティビティを作成することです。TABを作成するには、従う必要のあるいくつかの手順があります。

  1. tabHostを作成し、そのパラメーターを設定します
  2. クリック可能なタブのコンテナであるtabWidgetを作成します
  3. 各タブに関連付けられたビューを保持するために、frameLayoutを作成します
  4. tabSpecクラスを使用して各タブを作成します

そして、これらのリンクを参照してください、あなたを助けるでしょう

http://joshclemm.com/blog/?p=59

http://www.edumobile.org/android/android-beginner-tutorials/tab-control/

http://www.pocketmagic.net/?p=1132

于 2013-03-18T07:22:45.967 に答える
1

tabTwo内のリストを開きたい場合は、FirstFragmentクラスのインスタンスを作成し、タブを選択したときにそれをビューに追加する必要があります。

内部onTabSelectedで、nullでない場合の新しいインスタンスを作成し、FirstFragmentそれをactivity_mainファイルのコンテナ内のビューに追加します。コンテナは、フラグメントが占める必要のあるスペースが指定された、ビュー内の線形レイアウトです。フルスクリーンフラグメントの場合、コンテナはルートレイアウトです。このレイアウトにIDを指定するだけで済みます。新しいフラグメントを作成したら、次のように呼び出してアタッチしますtransaction.attach();。最終的なコードブロックは次のようになります。

/** this example assumes that the fragment
 * FirstFragment will be attached to tab 1
 * which is at position = 0, and SecondFragment
 * will be attached to tab 2, which is at 
 * position = 1. Also, the root layout of 
 * activity_main.xml has the id attribute of
 * fragment_container
 */

FirstFragment firstFragment;
SecondFragment secondFragment;

@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
    switch (tab.getPosition()) {
    case 0:
        if (firstFragment == null) {
            firstFragment = new FirstFragment();
            transaction.add(R.id.fragment_container,
                    firstFragment, "FIRST");

        } else {
            transaction.attach(firstFragment);
        }
        break;
    case 1:
        if (secondFragment == null) {
            secondFragment = new SecondFragment();
            transaction.add(R.id.fragment_container, secondFragment, "SECOND");
        } else {
            transaction.attach(secondFragment);
        }
        break;
    }
}
于 2013-03-18T14:21:15.720 に答える