2011-12-09 45 views
1

我有兩個佈局xml,無法讓第二個佈局正常工作。 放置在第二個佈局上的EditText不能按預期工作。它不接受字符。setContentView和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> 

回答

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> 

然後主。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(); 
     } 
    } 
} 

希望它幫助;)

1

我不認爲你可以用這種方式加載新的佈局。

只需將兩個EditText放在一個XML中,並將其中一個可見和另一個可視,並且反之亦然。

0

您只能在您的活動中調用setContentView()一次。

您可以

  1. 創建一個「主」的佈局,只是包含父I.E. LinearLayout或相對佈局 setContentView()在父級上。然後通過findViewById()獲得對它的引用,並在你的引用上調用.addView(),從這兩個文件中的一個傳遞充氣的xml。 .removeView()將允許您在需要時切換到另一個。

  1. 包括所有在一個XML佈局你的觀點,但讓他們的一半Visibility.GONE,當你想切換隻是使不見了可見的那些,反之亦然
+0

我不熟悉或者解決方案,您呈現。 謝謝你的擡頭。 –

0

我認爲它應該工作,你必須reinitialize references for example every findViewById needs to be called again after calling setContentView()。你正在這麼做首先你打電話給showXml1()&然後你點擊button1正在執行Case1,你會得到box1的值&顯示它&然後你打電話給showXml2()&等。我試過你的代碼&它的工作原理,我正在傷人爲什麼它不在你身邊工作?

另一件事是it may not be a good idea if you have to call findViewbyId() a LOT OF TIMES,所以你應該避免它我猜。