다음은 내 Tab 클래스입니다. 선택하고 선택을 취소하면 탭의 색상을 변경하려고합니다. 하지만 전화를 걸면 앱이 다운됩니다. tabHost.setOnTabChangedListener (MyOnTabChangeListener)?. 그 방법으로 앱을 시작할 수 없으며 nullpointerexception을 제공합니다. 나는 무엇을해야할지 모르겠다. 어떤 아이디어?/Android의 탭에서 색상을 변경하려고합니다.
@SuppressWarnings("deprecation")
public class Tabs extends TabActivity
{
private static final String TAG = "TabHostActivity";
private boolean mHaveShownStartDialog = false;
static TabHost tabHost;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_host);
setOnCreatePreferences();
try
{
addTab(getString(R.string.Search), R.drawable.searchtab, SearchTask.class);
addTab(getString(R.string.Bookmarks), R.drawable.blackheart1, Bookmarks.class);
addTab(getString(R.string.Latest), R.drawable.clock3, Latest.class);
addTab(getString(R.string.QAndA), R.drawable.pen, LatestFeedback.class);
getTabHost().setCurrentTab(0);
tabHost.setOnTabChangedListener(MyOnTabChangeListener);
}
catch(Exception e)
{
Log.e(TAG, e.getMessage());
}
}
public static OnTabChangeListener MyOnTabChangeListener = new OnTabChangeListener(){
public void onTabChanged(String tabId) {
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
{
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.WHITE);
}
tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.GRAY);
}
};
//public static void setTabColor(TabHost tabhost) {
// for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
// {
// tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected
// }
// tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected
//}
private void addTab(CharSequence label, int drawable_id, Class<?> c)
{
TabHost.TabSpec spec = getTabHost().newTabSpec("tab" + " "+ label);
spec.setIndicator(label, getResources().getDrawable(drawable_id));
spec.setContent(new Intent().setClass(this, c));
getTabHost().addTab(spec);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.tabs_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.tabs_menu_options_item:
//startActivityForResult(new Intent(this, Options.class) , 0);
return true;
default: return super.onOptionsItemSelected(item);
}
}
private void setOnCreatePreferences()
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean mUseStartDialog = preferences.getBoolean("use_dialog", true);
if(mUseStartDialog)
{
if(!mHaveShownStartDialog)
{
mHaveShownStartDialog = true;
startActivity(new Intent(this, WelcomeDialog.class));
}
}
}
}
(Ha! Good catch.) 올바른 경우 NullPointerException은'null.setOnTabChangedListener()'를 호출하여 발생합니다. – Sam
건배, 정말 바보 같았 어. 이제 getTabHost.setOnTabChangedListener()를 호출합니다. 때로는 자신의 코드가 눈이 어두워지는 경우도 있습니다.). 이제는 앱을 시작할 수 있지만 탭을 변경하려고하면 새로운 nullpointerexception이 발생하고 행에 충돌이 발생합니다. ** (int i = 0; i
tabhost 변수를 언제 어떻게 초기화하는지에 대한 질문 코드를 업데이트하십시오. 또한 나는 TabActivity를 처음부터 가지 않을 것입니다. 태블릿 화면에 필요한 단편 지원이 부족합니다. 대신 tabhost를 별도의 위젯으로 사용하십시오. 여기서는 매우 쉽고 읽기 쉬운 예제 코드를 찾을 수 있습니다. [TabActivity] (http://developer.android.com/reference/android/app/TabActivity.html) –