我有两个布局xml,无法让第二个布局正常工作。 放置在第二个布局上的EditText无法按预期工作。它不接受字符。
我在这里缺少什么? 我应该使用startActivity()吗?
Main.java
public class Main extends Activity implements View.OnClickListener {
EditText box1, box2;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
showXml1();
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
String box11 = box1.getText().toString();
Toast.makeText(this, box11,Toast.LENGTH_SHORT).show();
showXml2();
break;
case R.id.button2:
String box22 = box2.getText().toString();
Toast.makeText(this, box22,Toast.LENGTH_SHORT).show();
showXml1();
break;
}
}
public void showXml2() {
setContentView(R.layout.main2);
box2 = (EditText) findViewById(R.id.editText2);
}
public void showXml1() {
setContentView(R.layout.main);
box1 = (EditText) findViewById(R.id.editText1);
}
}
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Main1" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
android:onClick="onClick"
/>
</LinearLayout>
mail2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Main2" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button2"
android:onClick="onClick"
/>
</LinearLayout>
答案 0 :(得分:1)
我认为你不能以这种方式加载新的布局。
只需将两个EditTexts放在一个XML中,然后将一个可见,另一个隐身,再按一个按钮,反之亦然。
答案 1 :(得分:1)
使用具有与此类似结构的元布局xml文件:
meta_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<ViewFlipper
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/root">
<include
layout="@layout/main" />
<include
layout="@layout/main2" />
</ViewFlipper>
然后是main.java:
public class Main extends Activity implements View.OnClickListener {
EditText box1, box2;
ViewFlipper root;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.meta_main);
box1 = (EditText) findViewById(R.id.editText1);
box2 = (EditText) findViewById(R.id.editText2);
root = (ViewFlipper) findViewById(R.id.root);
}
public void onClick(View v) {
EditText editText = null;
switch (v.getId()) {
case R.id.button1:
editText = box1;
root.showNext();
break;
case R.id.button2:
editText = box2;
root.showPrevious();
break;
}
if(editText != null) {
Toast.makeText(this, editText.getText(), Toast.LENGTH_SHORT).show();
}
}
}
希望它有所帮助;)
答案 2 :(得分:0)
作为不同活动的替代方案,您可能需要查看ViewFlipper http://developer.android.com/reference/android/widget/ViewFlipper.html
答案 3 :(得分:0)
您只能在活动中调用一次setContentView()。
你可以
或
答案 4 :(得分:0)
我认为它应该有用,你必须reinitialize references for example every findViewById needs to be called again after calling setContentView()
。你正是这样做的,首先你要调用showXml1()&amp;然后你点击正在执行Case1的button1,你得到box1&amp;的价值显示它&amp;然后你打电话给showXml2()&amp;等等。我试过你的代码&amp;它有效,我正在伤害为什么它不适合你?
另一件事是it may not be a good idea if you have to call findViewbyId() a LOT OF TIMES
,所以你应该避免它。