2014-02-12 2 views
0

메신저 탭 3 개가있는 탭 호스트 사용. 첫 번째 항목 만 활성화됩니다. 그래서 액티비티를 시작할 때 첫 번째 탭 조각을 볼 수 있습니다. 거기에있는 목록을 누르거나이 예제의 버튼을 사용하게하려면 tabhost에서 다음 탭을 사용 가능하게 설정하고 싶습니다. Tabhost를 어떻게 얻을 수 있습니까? 내가 생각할 수있는 유일한 방법은 브로드 캐스트이지만이 작업을 수행하는 더러운 방식이라고 느낍니다.Android에서 TabHost의 버튼 누르기 탭 사용

여기 tabhost 내 Parrent 클래스입니다 :

public class Tourenuebersicht_fragment extends Fragment { 


private FragmentTabHost mTabHost; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_touren_uebersicht_fragment, 
      container, false); 


    mTabHost = new FragmentTabHost(getActivity()); 
    mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.tourenrealtabcontent); 

    mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator(getResources().getString(R.string.routes)), 
      Routen_fragment.class, null); 
    mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator(getResources().getString(R.string.stops)), 
      Tourstop_fragment.class, null); 
    mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator(getResources().getString(R.string.tasks)), 
      TourstopAuftrag_fragment.class, null); 

    mTabHost.getTabWidget().getChildTabViewAt(1).setBackgroundColor(Color.LTGRAY); 
    mTabHost.getTabWidget().getChildTabViewAt(1).setEnabled(false); 
    mTabHost.getTabWidget().getChildTabViewAt(2).setBackgroundColor(Color.LTGRAY); 
    mTabHost.getTabWidget().getChildTabViewAt(2).setEnabled(false); 

    return mTabHost; 

    } 

이 내 첫 아이 탭입니다 :

목록에 Longclicking 때 내가 다음 탭을 사용하려면
public class Routen_fragment extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_routen_fragment, 
      container, false); 

    return rootView; 
    } 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 
    ListView touren = (ListView) getView().findViewById(R.id.tourenListe); 
    touren.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, 
       long id) { 



      final Dialog dialog = new Dialog(getActivity()); 
      dialog.setContentView(R.layout.dialog_tour_details); 
      dialog.setTitle("Tour Details"); 
      dialog.setCanceledOnTouchOutside(true); 
      dialog.setCancelable(true); 

    }); 


    touren.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 

      return false; 
     } 
    }); 

.

TabHost th = (TabHost) getView().findViewById(android.R.id.tabhost); 

당신이, 당신이 직접 루트 View에 그것을 할 findViewById()을 그래서 당신은 한 호출 할 수 없습니다 Fragment의를 사용하는 것처럼 : 사전에

덕분에

답변

0

난 당신이 찾고있는 생각 , getView()로 얻은

은이 같은 것을 사용할 수 있으며, 특정 일 현재 탭을 변경하려면 :

th.setCurrentTab(th.getTabWidget().getChildCount() - 1); 

이, 예를 들어, tabhost에서 마지막 탭을 활성화합니다.

+0

흠 빠르게 대답 해 주셔서 감사합니다. 내 onActivitycreated 줄을 넣었어요하지만 호출 할 때 nullpointer 예외가 th.getTabWidget(). getChildAt (1) .setEnabled (true); 그는 tabhost를 찾을 수 없기 때문에. –

+0

getChildAt (1) 대신'getChildTabViewAt (1)'을 사용하십시오. TabHost는 일부 이름이 매우 까다로울 수 있습니다 ... – nKn

+1

좋아, 해결 했어. 첫 번째 문제는 FragmentTabHost를 사용하는 인스턴트 메신저이고 두 번째는 getParentFragment(). getView()를 사용해야한다는 것입니다. 하지만 고맙다 당신이 나를 많이 도왔 :) –