“不幸的是,在尝试使用ActionBar.addTab后,appname已停止运行”

时间:2014-01-17 20:11:33

标签: android

我在尝试通过一些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);

代码工作正常(显示空白的标签栏),但是一旦我将它们添加进去,我的应用就崩溃了。

1 个答案:

答案 0 :(得分:1)

根据FragmentActivty的文档:

  

如果您要实施包含操作栏的活动,请执行   应该使用ActionBarActivity类,它是一个子类   这一个,所以允许你在API级别7上使用Fragment API   更高。

FragmentActivity的{​​{1}}适用于API 11+。如果您的getActionBar()为11岁,则应使用minSDKVersion android.app.ActivityActivity,并获得ActionBar的引用,就像您现在所做的那样。如果您希望能够使用FragmentsActionBar使用ActionBarActivity,这是v7支持库的一部分