0

Android 애플리케이션에서 FragmentTabHost를 사용하고 있습니다. 현재 각 탭을 선택할 때 탭 아이콘을 동적으로 변경할 수 없기 때문에 탭 호스트에 3 개의 탭을 추가했습니다.Android에서 탭 아이콘을 변경할 수 없습니다.

필자가 요구하는 탭을 선택하면 다른 탭 아이콘을 변경해야하며, 탭 아이콘을 변경하려고하면 null pointer exception이 표시됩니다. 이것은 널 포인터 예외가있는 라인입니다. onTabChanged method

ImageView v1 = (ImageView) mTabHost.getTabWidget().getChildAt(0) 
        .findViewById(android.R.id.icon); 

v1 is return null (checked by if condition) 

public class MainActivity extends FragmentActivity implements 
      OnTabChangeListener { 

     private static final String TAB_1_TAG = "FindTab"; 
     private static final String TAB_2_TAG = "AddPopUpTab"; 
     private static final String TAB_3_TAG = "MyAccoutTab"; 

     private FragmentTabHost mTabHost; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      InitView(); 
     } 

     private void InitView() { 
      mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
      mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

      mTabHost.addTab(
        setIndicator1(MainActivity.this, 
          mTabHost.newTabSpec(TAB_1_TAG), R.drawable.tab1), 
        Tab1Container.class, null); 
      mTabHost.addTab(
        setIndicator1(MainActivity.this, 
          mTabHost.newTabSpec(TAB_2_TAG), R.drawable.tab2), 
        Tab2Container.class, null); 
      mTabHost.addTab(
        setIndicator1(MainActivity.this, 
          mTabHost.newTabSpec(TAB_3_TAG), R.drawable.tab3), 
        Tab3Container.class, null); 

      mTabHost.getTabWidget().setDividerDrawable(null); 
      mTabHost.setOnTabChangedListener(MainActivity.this); 

     } 
    private TabSpec setIndicator1(Context ctx, TabSpec spec, int genresIcon) { 
     View v = LayoutInflater.from(ctx).inflate(R.layout.tab_item, null); 
     ImageView img = (ImageView) v.findViewById(R.id.img_tabtxt); 
     img.setBackgroundResource(genresIcon); 
     return spec.setIndicator(v); 
    } 

    @Override 
    public void onTabChanged(String arg0) { 
     Log.e("tab change string", arg0); 
        ImageView v1 = (ImageView) mTabHost.getTabWidget().getChildAt(0) 
        .findViewById(android.R.id.icon); 
      if (v1 == null) { 
       Log.e("v1", "null"); // Line 
      } else { 
       Log.e("v1", " Not null"); 
      } 

      if (getResources().getDrawable(R.drawable.tab3) == null) { 
       Log.e("resource", "null"); 
      } else { 
       Log.e("resource", "not null"); 
      } 

      v1.setImageDrawable(getResources().getDrawable(R.drawable.tab3)); 

      ImageView v2 = (ImageView) mTabHost.getTabWidget().getChildAt(1) 
        .findViewById(android.R.id.icon); 
      v2.setImageDrawable(getResources().getDrawable(R.drawable.tab1)); 

      ImageView v3 = (ImageView) mTabHost.getTabWidget().getChildAt(2) 
        .findViewById(android.R.id.icon); 
      v3.setImageDrawable(getResources().getDrawable(R.drawable.tab2)); 
    } 

    } 

Layout for tab item: 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <ImageView 
      android:id="@+id/img_tabtxt" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:layout_marginTop="5dp" 
      android:layout_marginBottom="5dp" 
      android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

답변

0

에서 다음 코드는 당신이 당신에게 실행 바는 좋은 필요가 있다고 생각합니다.

작업 표시 줄을 사용하려면 다음을 수행하십시오. 시도해보세요.

Change Tab icon in Action bar