2012-08-07 5 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.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**