简体   繁体   English

java.lang.IllegalStateException:Action Bar Tab必须有一个Callback

[英]java.lang.IllegalStateException: Action Bar Tab must have a Callback

I am trying to add an ActionBarSherlock with 4 tabs to my application. 我正在尝试向我的应用程序添加一个带有4个选项卡的ActionBarSherlock I tried to extend from SherlockActivity then SherlockFragmentActivity`, but I still get this Exception: 我试图从SherlockActivity延长then SherlockFragmentActivity`,但我仍然得到这个异常:

java.lang.IllegalStateException: Action Bar Tab must have a Callback. java.lang.IllegalStateException:Action Bar Tab必须有一个Callback。

    import java.io.IOException;
    import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.json.JSONArray;
import org.json.JSONObject;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.ActionBar.TabListener;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class HomeActivity extends SherlockFragmentActivity implements OnClickListener, OnItemClickListener, TabListener {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.homelayout);
        try{

            ActionBar actionBar = getSupportActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            Tab homeTab = actionBar.newTab();
            homeTab.setIcon(R.drawable.tab_home);
            Tab exploreTab = actionBar.newTab();
            exploreTab.setIcon(R.drawable.tab_explore);
            Tab leaderBoardTab = actionBar.newTab();
            leaderBoardTab.setIcon(R.drawable.tab_leaderboard);
            Tab profileTab = actionBar.newTab();
            profileTab.setIcon(R.drawable.tab_profile);

            actionBar.addTab(homeTab);
            actionBar.addTab(exploreTab);
            actionBar.addTab(leaderBoardTab);
            actionBar.addTab(profileTab);
                     }catch(Exception ex){

            Log.e("error from onCreate" , ex.toString());
            Log.e("error from onCreate" , ex.getStackTrace().toString());
            }

               }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }



    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }



    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }
}

You must register an ActionBar.TabListener on a Tab before adding it to the actionBar. 在将选项卡添加到actionBar之前,必须在选项卡上注册ActionBar.TabListener。

In your case: 在你的情况下:

Tab homeTab = actionBar.newTab();
homeTab.setTabListener(this) //'this' because your activity implements a TabListener
...
actionBar.addTab(homeTab);

Otherwise I would recommend you to implement your listeners in their own classes so that your Activity doesn't loose its purpose and is also easily understendable and readable. 否则我会建议你在他们自己的类中实现你的监听器,这样你的Activity就不会失去它的目的,而且也很容易被忽视和读取。

You may repeat the tab listener as this 您可以像这样重复选项卡监听器

    ActionBar.Tab tab1 = actionBar.newTab();
    tab1.setText("Tab 1");
    tab1.setTabListener(this);

    ActionBar.Tab tab2 = actionBar.newTab();
    tab2.setText("Tab 2");
    tab2.setTabListener(this);

    ActionBar.Tab tab3 = actionBar.newTab();
    tab3.setText("Tab 3");
    tab2.setTabListener(this); **// this is must be tab3 not tab2**

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.IllegalStateException:必须连接GoogleApiClient - java.lang.IllegalStateException: GoogleApiClient must be connected java.lang.IllegalStateException:[TextView]不能为null - java.lang.IllegalStateException: [TextView] must not be null java.lang.IllegalStateException - java.lang.IllegalStateException Apache POI - 饼图 - java.lang.IllegalStateException:类别和值必须具有相同的点计数 - Apache POI - PIE Chart - java.lang.IllegalStateException: Category and values must have the same point count 操作栏选项卡必须具有回调addTab错误 - Action Bar Tab must have a Callback addTab error java.lang.IllegalStateException目标主机不能为null连接到数据库 - java.lang.IllegalStateException Target host must not be null connecting to database java.lang.IllegalStateException:您必须设置文本或视图 - java.lang.IllegalStateException: You must either set a text or a view 原因:java.lang.IllegalStateException:必须提供事务管理器 - Caused by: java.lang.IllegalStateException: A transaction manager must be provided java.lang.IllegalStateException:方言必须在空间上启用方言 - java.lang.IllegalStateException: Dialect must be spatially enabled dialect Kafka java.lang.IllegalStateException:必须提供主题、主题模式或主题分区 - Kafka java.lang.IllegalStateException: topics, topicPattern, or topicPartitions must be provided
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM