2012-08-07 86 views
17

我想一個ActionBarSherlock有4個選項卡添加到我的應用程序。 我試圖從SherlockActivity then SherlockFragmentActivity`延長,但我仍然得到這個異常:java.lang.IllegalStateException:操作欄標籤必須有一個回調

java.lang.IllegalStateException:操作欄標籤必須有一個回調。

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 

    } 
} 
+0

添加的你試了一下一些代碼,也許一個完整的錯誤的副本,所以我們可以得到什麼事情的一個更好的主意。 – 2012-08-07 13:48:44

回答

35

你必須將它添加到以前的ActionBar上註冊一個Tab的ActionBar.TabListener。

你的情況:

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

否則我建議你實現你的聽衆在自己的班級,這樣你的活動不失去其目的,也容易understendable和可讀性。

+0

太感謝你了。 – 2012-08-10 01:42:16

+0

歡迎您。 – GMan 2012-08-13 07:58:48

0

您可以重複選項卡監聽器,因爲這

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** 
相關問題