我在尝试通过一些Android教程时尝试向操作栏添加标签,但每次使用addTab时都会出现问题。我的代码目前看起来像这样:
package com.example.myfirstapp;
import android.app.ActionBar;
import android.app.ActionBar.TabListener;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.app.FragmentManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ActionBar actionBar = getActionBar();
// actionBar.setSubtitle("mytest");
actionBar.setTitle("Title Goes Here");
// Set up the action bar to show tabs.
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Here are a couple tabs
ActionBar.Tab PlayerTab = actionBar.newTab().setText("Fragment A");
ActionBar.Tab StationsTab = actionBar.newTab().setText("Fragment B");
// for each of the sections in the app, add a tab to the action bar.
actionBar.addTab(PlayerTab);
actionBar.addTab(StationsTab);
// Create a tab listener that is called when the user changes tabs.
// ActionBar.TabListener tabListener = new ActionBar.TabListener() {
// public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// // show the given tab
// }
//
// public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
// // hide the given tab
// }
//
// public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
// // probably ignore this event
// }
// };
//
// // Add 3 tabs, specifying the tab's text and TabListener
// for (int i = 0; i < 3; i++) {
// actionBar.addTab(
// actionBar.newTab()
// .setText("Tab " + (i + 1))
// .setTabListener(tabListener));
// }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// First run
// getMenuInflater().inflate(R.menu.main, menu);
// return true;
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
public void openSearch() {
Toast.makeText(this, "Search button pressed", Toast.LENGTH_SHORT).show();
}
public void openSettings() {
Toast.makeText(this, "Settings pressed", Toast.LENGTH_SHORT).show();
}
// Finding selected option item
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
// menuItem = item;
// menuItem.setActionView(R.layout.progressbar);
// menuItem.expandActionView();
// TestTask task = new TestTask();
// task.execute("test");
// break;
return true;
case R.id.action_settings:
openSettings();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/** Called when the user clicks the Send button */
public void sendMessage(View view) {
// Do something in response to button
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
}
如果我用
注释掉这些行 actionBar.addTab(PlayerTab);
actionBar.addTab(StationsTab);
代码工作正常(显示空白的标签栏),但是一旦我将它们添加进去,我的应用就崩溃了。
答案 0 :(得分:1)
根据FragmentActivty
的文档:
如果您要实施包含操作栏的活动,请执行 应该使用ActionBarActivity类,它是一个子类 这一个,所以允许你在API级别7上使用Fragment API 更高。
FragmentActivity
的{{1}}适用于API 11+。如果您的getActionBar()
为11岁,则应使用minSDKVersion
android.app.Activity
版Activity
,并获得ActionBar
的引用,就像您现在所做的那样。如果您希望能够使用Fragments
而ActionBar
使用ActionBarActivity
,这是v7支持库的一部分