我正在使用一个使用标签布局的Activity的Android应用程序。有两个选项卡可在某些TextView中显示的内容之间切换。
这意味着两个标签规范指向内容相同的布局(线性),R.id.plantilla:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include layout="@layout/plantilla"/>
</FrameLayout>
</LinearLayout>
但这只有在我切换到标签2并返回到1时才有效,即当活动启动时,在标签更改之前无法看到布局“plantilla”。这是我的问题。
解决这个问题的最简单方法是什么?
PD:我试图复制该行
<include layout="@layout/plantilla">
在tabhost xml中,但在这种情况下,我无法使用findViewById(R.id.someTextView)从Java代码访问TextViews对象;
答案 0 :(得分:1)
我不相信你可以使用include,我认为你需要在xml中用不同的id标签实际定义你的布局两次。
或者您可以简单地定义容器视图,然后以编程方式向其添加视图。我以前做过那个。我是这样做的:
<强> tablayout 强>
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dp" >
<TextView
android:id="@+id/setupheader"
android:layout_width="fill_parent"
android:layout_height="20dp"
android:textSize="15dp" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="30dp"
android:gravity="bottom" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp" >
<!-- General Info Tab -->
<LinearLayout
android:id="@+id/general_tab"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
<!-- Tool Tab -->
<LinearLayout
android:id="@+id/tool_tab"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ListView
android:id="@+id/list1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
</LinearLayout>
<!-- Offset Tab -->
<LinearLayout
android:id="@+id/offset_tab"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ListView
android:id="@+id/list2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
</LinearLayout>
<!-- Notes Tab -->
<LinearLayout
android:id="@+id/note_tab"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
以下是我的标签活动(我删除了很多重要部分,但它应该足够好地显示我如何为每个标签单独执行制表符。)
tabactivity
public class SetupDisplay extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setupdetailmain);
Bundle extras = getIntent().getExtras();
RowId = extras.getLong("RowId");
StartTab = extras.getInt("StartTab");
// ***************************************************************
// Set up the tabs in the tabhost
// ***************************************************************
tabHost = getTabHost();
TabHost.TabSpec spec;
spec = tabHost.newTabSpec("General").setIndicator("General")
.setContent(R.id.general_tab);
tabHost.addTab(spec);
spec = tabHost.newTabSpec("Tools").setIndicator("Tools")
.setContent(R.id.tool_tab);
tabHost.addTab(spec);
spec = tabHost.newTabSpec("Offsets").setIndicator("Offsets")
.setContent(R.id.offset_tab);
tabHost.addTab(spec);
spec = tabHost.newTabSpec("Notes").setIndicator("Notes")
.setContent(R.id.note_tab);
tabHost.addTab(spec);
populateTabs(StartTab);
}
// ***************************************************************
// Clear views from linear layout tabs
// ***************************************************************
private void clearTabs() {
general.removeAllViews();
notes.removeAllViews();
}
// ***************************************************************
// Fill the tabs
// ***************************************************************
private void populateTabs(int TabShown) {
generaltab();
tooltab();
notestab();
offsettab();
tabHost.setCurrentTab(TabShown);
}
// ***************************************************************
// Fill the General tab
// ***************************************************************
private void generaltab() {
general = (LinearLayout) findViewById(R.id.general_tab);
String prgdisp = SETUPINFO_PGM1;
if (SETUPINFO_PGM2 != null) {
prgdisp = prgdisp + ", " + SETUPINFO_PGM2;
}
if (SETUPINFO_PGM3 != null) {
prgdisp = prgdisp + ", " + SETUPINFO_PGM3;
}
TextView programs = new TextView(this);
programs.setText("Program(s): " + prgdisp);
programs.setTextSize(20);
general.addView(programs);
if (SETUPINFO_KIT == null || SETUPINFO_KIT.equals("No Kit")) {
} else {
TextView kit = new TextView(this);
kit.setText("Kit: " + SETUPINFO_KIT);
kit.setTextSize(20);
general.addView(kit);
}
if (SETUPINFO_FIXTURE1 == null && SETUPINFO_FIXTURE2 == null) {
} else {
String fixtdisp = SETUPINFO_FIXTURE1;
if (SETUPINFO_FIXTURE2 != null) {
fixtdisp = fixtdisp + ", " + SETUPINFO_FIXTURE2;
}
TextView fixtures = new TextView(this);
fixtures.setText("Fixture(s): " + fixtdisp);
fixtures.setTextSize(20);
general.addView(fixtures);
TextView fixtureloc = new TextView(this);
fixtureloc.setText("Fixture Location: " + SETUPINFO_FIXTURELOC);
fixtureloc.setTextSize(20);
general.addView(fixtureloc);
}
if (SETUPINFO_VISE == null) {
} else {
TextView vise = new TextView(this);
vise.setText("Vise(s): " + SETUPINFO_VISE);
vise.setTextSize(20);
general.addView(vise);
}
}
// ***************************************************************
// Fill the Offset tab
// ***************************************************************
private void offsettab() {
wpccount = 0;
for (int i = 0; i < 20; i++) {
if (wpcdesc[i] != null) {
wpcdisplayhold[wpccount] = wpcid[i] + " - " + wpcdesc[i];
wpcidhold[wpccount] = wpcid[i];
wpcdeschold[wpccount] = wpcdesc[i];
wpccount++;
}
}
wpcdisplay = new String[wpccount];
for (int i = 0; i < wpccount; i++) {
wpcdisplay[i] = wpcdisplayhold[i];
}
mWPCView = (ListView) findViewById(R.id.list2);
mWPCView.setAdapter(new ColorizingListAdapter(SetupDisplay.this,
wpcdisplay, "Offset"));
registerForContextMenu(mWPCView);
}
// ***************************************************************
// Fill the Notes tab
// ***************************************************************
private void notestab() {
notes = (LinearLayout) findViewById(R.id.note_tab);
notestxt = new TextView(this);
notestxt.setText(SETUPINFO_NOTES);
notestxt.setTextSize(15);
notes.addView(notestxt);
}
}
希望这有帮助。
答案 1 :(得分:0)
请从xml布局中删除include标记,并保留简单的内容:
<?xml version="1.0" encoding="utf-8"?>
<!-- Tab Host -->
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Bottom tab bar -->
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1"/>
<!-- -5dip bottom margin for not showing the annoying bottom line -->
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="65dip"
android:layout_weight="0"
android:layout_marginBottom="-5dip"/>
</LinearLayout>
</TabHost>
从你的TabActivity类中,只需将其放入onCreate():
//Set tab host
tabHost = getTabHost();
//First Tab
TabSpec firstTabSpec = tabHost.newTabSpec("FirstTab");//title
firstTabSpec.setIndicator("FirstTab", getResources().getDrawable(R.drawable.item_first_tab)); //icon
Intent firstTabIntent = new Intent(this, FirstTab.class);//action
firstTabSpec.setContent(firstTabIntent);//set tab
//Second Tab
TabSpec secondTabSpec = tabHost.newTabSpec("SecondTab");//title
secondTabSpec.setIndicator("SecondTab", getResources().getDrawable(R.drawable.second_tab));//icon
Intent secondTabIntent = new Intent(this, FirstTab.class);//action
secondTabSpec.setContent(secondTabIntent);//set tab
//Add tabs to tab host
tabHost.addTab(firstTabSpec);//add first tab
tabHost.addTab(secondTabSpec);//add second tab which goes to your FirstTab.class
您可以为标签创建不同的活动或使用单个活动。