我有这段代码:
public void onResume()
{
super.onResume();
tabHost=getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("All").setContent(new Intent(this, AllTest.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Attempted").setContent(
new Intent(this, Att_Test.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("Unattempted").setContent(
new Intent(this, SyncAlbum.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
tabHost.addTab(tabHost.newTabSpec("tab4").setIndicator("New").setContent(
new Intent(this, SyncTest.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
tabHost.getTabWidget().getChildAt(0).getLayoutParams().height =35;
tabHost.getTabWidget().getChildAt(1).getLayoutParams().height =35;
tabHost.getTabWidget().getChildAt(2).getLayoutParams().height =35;
tabHost.getTabWidget().getChildAt(3).getLayoutParams().height =35;
if(tabbed.equals("Att_Test")){
tabHost.setCurrentTab(1);
}
else
{
tabHost.setCurrentTab(0);
}
}
在一系列方法之后再次调用.onResume:
tabHost.clearAllTabs();
onResume();
当用户在第一个选项卡中时,此代码可以正常工作,但是当我们尝试在其他选项卡中调用onResume方法时,它会给出nullPointer:
03-27 18:48:05.833: E/AndroidRuntime(18564): FATAL EXCEPTION: main
03-27 18:48:05.833: E/AndroidRuntime(18564): java.lang.NullPointerException
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.TabWidget.setCurrentTab(TabWidget.java:339)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.TabWidget.focusCurrentTab(TabWidget.java:363)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.TabHost.setCurrentTab(TabHost.java:320)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.TabHost.addTab(TabHost.java:213)
03-27 18:48:05.833: E/AndroidRuntime(18564): at com.cuelearn.main.TestTab.onResume(TestTab.java:65)
03-27 18:48:05.833: E/AndroidRuntime(18564): at com.cuelearn.main.TestTab$3$1.onClick(TestTab.java:209)
03-27 18:48:05.833: E/AndroidRuntime(18564): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:874)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.ListView.performItemClick(ListView.java:3382)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.os.Handler.handleCallback(Handler.java:587)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.os.Handler.dispatchMessage(Handler.java:92)
03-27 18:48:05.833: E/AndroidRuntime(18564): at android.os.Looper.loop(Looper.java:123)
请帮我解决这个问题。我是新手?
编辑整个代码
这些是其他方法:
void setupView()
{
Button name=(Button)findViewById(R.id.name);
name.setText(login.A_students.STUDENT_NAME);
name.setOnClickListener(logout);
((Button)findViewById(R.id.cuelearn)).setOnClickListener(cuelearnClicked );
courses course_db= new courses(this);
course_db.open();
Cursor s=course_db.getrecord(CourseId);
coursename=(Button)findViewById(R.id.blank);
setCourseName(s.getString(2));
coursename.setOnClickListener(course_nameClicked);
}
void setCourseName(String courseid)
{
coursename.setText(courseid);
}
private OnClickListener logout = new OnClickListener(){
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(TestTab.this);
builder.setMessage("Are you sure you want to Logout?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
startActivity(new Intent(TestTab.this,com.cuelearn.main.login.class));
}
})
.setNeutralButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}};
private OnClickListener cuelearnClicked = new OnClickListener(){
@Override
public void onClick(View v) {
// TODO OnClickListener()
Intent intent = new Intent(TestTab.this, cuelearntwo.class)
第二个标签代码
公共类Att_Test扩展了Activity {
private testpapertable testpaper_db;
private courses courses_db;
private coursesclass A_courses=new coursesclass();
ArrayList<String> courseid;
ArrayList<String> courseName;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TestTab.tabbed="Att_Test";
requestWindowFeature(Window.FEATURE_NO_TITLE);
System.out.println(TestTab.CourseId+"ALLTE");
setContentView(R.layout.alltest);
showAllTestPapers();
}
答案 0 :(得分:2)
试试这个
tabHost.setCurrentTabByTag("tab1");
这对我有用。希望它也能帮到你..
...谢谢
答案 1 :(得分:1)
我认为您从TabActivity的子活动中调用以下函数。
tabHost.clearAllTabs();
这将删除与标签主机关联的所有标签。因此,如果没有任何内容可以显示,则无法显示任何内容。
我对此并不完全确定,但我会以这种方式检查。
关于上一个答案,这里有一种从子活动调用tabHost方法的方法:
((TabActivity) getParent()).getTabHost().setCurrentTab(0);
我希望这可以提供帮助。
答案 2 :(得分:1)
好的,这是一个创建新标签的方法:
private static int label = 0;
private void addTab(String name, Class<?> c)
{
TabHost tabHost = getTabHost();
Intent intent = new Intent(this, c);
TabHost.TabSpec spec = tabHost.newTabSpec("tab_" + label++);
spec.setIndicator(name);
spec.setContent(intent);
tabHost.addTab(spec);
}
您可以像这样添加所有标签
private void addTabs()
{
addTab("All", AllTest.class);
addTab("Attempted", Att_Test.class);
addTab("Unattempted", SyncAlbum.class);
addTab("New", R.drawable.tab_indicator_location, SyncTest.class);
}
最后将其添加到onResume方法:
public void onResume()
{
super.onResume();
setTabs();
}
它应该有用。
答案 3 :(得分:0)
你不能在Resume方法上操作tab活动。我有同样的问题,因为在tab活动中它可以使用windowsonFoucs方法你无法处理onResume方法。您可以将代码粘贴到创建方法。