2012-08-07 11 views
17

होना चाहिए, मैं अपने आवेदन में 4 टैब के साथ ActionBarSherlock जोड़ने की कोशिश कर रहा हूं। मैं 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

के रूप में टैब श्रोता दोहरा सकते हैं कि तुम क्या कोशिश की है में से कुछ कोड है, और शायद पूर्ण त्रुटि की एक प्रति जोड़े, तो हम क्या हो रहा है का एक बेहतर विचार प्राप्त कर सकते हैं । –

उत्तर

35

आप ActionBar में जोड़ने से पहले एक टैब पर एक ActionBar.TabListener रजिस्टर करना होगा।

आपके मामले में:

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

अन्यथा मैं अपने स्वयं के कक्षाओं में अपने श्रोताओं को लागू करने के लिए इतना है कि अपनी गतिविधि अपने उद्देश्य ढीला नहीं है और भी आसानी से understendable और पठनीय है आप की सिफारिश करेंगे।

+0

आपको बहुत बहुत धन्यवाद। –

+0

आपका स्वागत है। – GMan

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**