1

다음은 탭 호스트를 만드는 방법입니다. 사용자가 탭을 클릭하면 탭을 가져 오는 것입니다. 문제는 태그 값 대신 null을 반환한다는 것입니다.FragmentTabHost는 탭의 태그를 얻을 때 null을 반환합니다.

tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
    tabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

    tabHost.addTab(
      tabHost.newTabSpec("home").setIndicator("", 
        getResources().getDrawable(R.drawable.meun_home)), 
      HomeFragment.class, null); 
    tabHost.addTab(
      tabHost.newTabSpec("form").setIndicator("", 
        getResources().getDrawable(R.drawable.meun_register)), 
      FormFragment.class, null); 
    tabHost.addTab(
      tabHost.newTabSpec("calculator").setIndicator("", 
        getResources().getDrawable(R.drawable.meun_calculator)), 
      CalculatorFragment.class, null); 
    tabHost.addTab(
      tabHost.newTabSpec("news").setIndicator("", 
        getResources().getDrawable(R.drawable.meun_call)), 
      HomeFragment.class, null); 

    tabHost.getTabWidget().setDividerDrawable(
      getResources().getDrawable(R.drawable.border)); 

    for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
     tabHost.getTabWidget().getChildAt(i).setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
     LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.MATCH_PARENT, 1f); 
     tabHost.getTabWidget().getChildAt(i).setLayoutParams(params); 
     tabHost.getTabWidget().getChildAt(i).setPadding(0, 0, 0, 0); 
     tabHost.getTabWidget().getChildAt(i).setOnTouchListener(new OnTouchListener(){ 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       int action = event.getAction(); 
       if(action == MotionEvent.ACTION_UP) {      
        Log.d("test1",""+v.getTag()); 
        return true; // doesnt allow tab change 
       } 
       return false; 
      }    
     }); 
    } 

null을 반환하는 행 Log.d("test1",""+v.getTag());을 찾을 수 있습니다. 어떤 예상하는 등 "집", "양식", ..... 덕분에 많은

답변

1

당신이 당신의 newTabSpec 당신의 보기 모든 태그를 설정하지 않기 때문에 같은 일부 문자열을 반환합니다. 드로어 블 아이콘을 설정했지만 태그을 설정하지 않았습니다. 그래서 당신은 두 가지 방법으로 그것을 할 수 있습니다 :

1) 먼저 당김 아이콘에서 이미지 뷰를 만들 :

imageView.setImageBitmap(bitmap); 
imageView.setImageResource(R.drawable.my_image); 
imageView.setImageDrawable(drawable); 

다음 당신의 이미지 뷰에 태그을 설정하고 추가 할 setIndicator(View view)를 사용 newTabSpec

2) 또는 당신이 당신의 당김을 추가 한 후 사용할 수있는 getChildTabViewAt()는보기를 얻을 다음의 태그을 설정합니다.

요약하면 분명히 null이되도록 태그를 설정하지 않았습니다.

다큐먼트는 말한다 :

TabHost.TabSpec :

탭이 탭을 표시, 내용, 그리고 그것의 을 추적하는 데 사용되는 태그가 있습니다. 이 빌더는 이러한 옵션 중에서 선택하는 데 도움이됩니다. 탭 표시를 위해, 당신의 선택은 다음과 같습니다 : 1) 레이블 2) 그래서 문자열 그냥 라벨의 tag하고 레이블이있는 레이블과 탭 내용에 대한 아이콘,

세트 다른 것들은 tagview의 메모리이며 object을 저장할 수 있으며 그 객체는 string이거나 ListView를 만드는 데 사용 된 ViewHolder 디자인 패턴과 같은 것일 수 있습니다. 여기

+0

감사 및 .newTabSpec 그것이 태그 또는 I가 참조 할 수있는 ID입니다 덧붙였다 무엇인가? – user782104

+0

업데이트 해 주셔서 감사합니다! 그래서 newTabSpec을 얻을 수는 없지만 그 아이콘에 태그를 설정해야합니까? – user782104

+0

완료. 덕분에 많이 – user782104

1

입니다 솔루션 2) 마지막 대답 저자에 의해 권장 :

View vv = tabWidget.getChildAt(i); 
vv.setTag("mytag_"+i); 
+0

안녕하세요. 안녕하세요. 이것은 실제로 다른 답변에 대한 주석이어야합니다. 충분한 평판을 얻었 으면 댓글을 달 수 있습니다. 건배. – Cthulhu

관련 문제