带有操作栏选项卡和listview / gridview的Android应用程序

时间:2013-08-15 09:12:03

标签: android layout menu tabs android-actionbar

您好我正在尝试做简单的应用(媒体播放器)。我有一些问题。我已经完成了一个包含3个按钮的菜单(在menu.xml文件中),在MainActivity.java中完成了3个选项卡。我的问题是: 如何将这些项目(按钮和标签)应用于所有活动?我是否需要粘贴MainActivity中的代码? (addTab,覆盖函数等)在我看来必须有其他方式。更重要的是:我想这样做,当生病点击tab1,listview apears下面,如果我点击tab2,gridview apears下面。我应该为3个标签做3种不同的布局和3种不同的活动吗?或1个布局和1个活动与所有项目?它应该是什么样子。

我已经完成了当我点击tab1我开始新活动时,onCreate函数的新活动加载了新的布局与listview(对于tab2 gridview)但在这种情况下我错过了我的操作栏和标签:(当我复制操作栏和来自MainActivity应用程序的标签代码甚至没有启动:(不过我之前说过,如果我被迫将代码粘贴到任何地方会很奇怪

我的menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_home"
      android:icon="@drawable/navigation_back"
      android:title="@string/action_home"
      android:showAsAction="always" />"
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="always" />
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
    android:icon="@drawable/ic_action_overflow"
    android:title="@string/action_settings"
    android:showAsAction="always" />

</menu>

MainActivity.java

public class MainActivity extends Activity implements ActionBar.TabListener{
private static final String STATE_SELECTED_NAVIGATION_ITEM =        "selected_navigation_item";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Set up the action bar to show tabs.
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // For each of the sections in the app, add a tab to the action bar.
    actionBar.addTab(actionBar.newTab().setText(R.string.title_section_music)
        .setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText(R.string.title_section_video)
        .setTabListener(this));
    actionBar.addTab(actionBar.newTab().setText(R.string.title_section_photo)
        .setTabListener(this));
}
  @Override
  public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Restore the previously serialized current tab position.
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
      getActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
    }
  }

  @Override
  public void onSaveInstanceState(Bundle outState) {
    // Serialize the current tab position.
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getActionBar()
        .getSelectedNavigationIndex());
  }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.action_home:
            Intent intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        case R.id.action_search:
            //openSearch();
            return true;
        case R.id.action_settings:
            //openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
  @Override
  public void onTabSelected(ActionBar.Tab tab,
      FragmentTransaction fragmentTransaction) {
      Intent intent = new Intent(this, PlayerListViewActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
  }

  @Override
  public void onTabUnselected(ActionBar.Tab tab,
      FragmentTransaction fragmentTransaction) {
  }

  @Override
  public void onTabReselected(ActionBar.Tab tab,
      FragmentTransaction fragmentTransaction) {
  }

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

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));
    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            String[] tekst = {"Music", "Video", "Settings", "Exit"};
            Toast.makeText(MainActivity.this, "" + tekst[position], Toast.LENGTH_SHORT).show();
            if(position == 3)
            {
                finish();
                System.exit(0);
            }
        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}*/

}

1 个答案:

答案 0 :(得分:0)

您不需要再次编写代码将第二个活动扩展到Mainactivity而不是活动。

公共类SecondActivity扩展了Mainactivity 简单:) 希望它可以帮到你