2

我想在 Tab 中显示 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. 创建一个框架布局,以保存与每个选项卡关联的视图
  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,创建一个FirstFragmentif 它不为 null 的新实例,并将其添加到您的 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 回答