findViewById其他布局

时间:2012-12-01 09:24:01

标签: android findviewbyid

我有2个xml,名称是formOne.xml和formTwo.xml

formOne.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"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">

    <EditText
        android:id="@+id/editTextName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

  </LinearLayout>

和fomTwo.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"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">

    <Button
            android:id="@+id/buttonSave"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:text="@string/btSave" />

  </LinearLayout>

我有两个活动,名称是FormOne.java和FormTwo.java

FormOne.java:

public class FormOne extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.formOne);
            EditText etName = (EditText) findViewById(R.id.editTextName);
}

}

和FormTwo.java:

public class FormTwo extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.formTwo);

    EditText etName = (EditText) findViewById(R.id.editTextName);

    Button btSave = (Button) findViewById(R.id.buttonSave);
    btSimpan.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            if (etName.getText().length() != 0) {
                Toast.makeText(FormTwo.this, "Name is : "+etName.getText().toString(), Toast.LENGTH_SHORT).show();
            }
            else {
                Toast.makeText(FormTwo.this, "Input the name please", Toast.LENGTH_SHORT).show();
            }
            // TODO Auto-generated method stub
        }
    });
}

我想从editTextName中捕获值,并且值可以在FormTwo.java中显示Toast。

但我的申请部队关闭, 我怎样才能获得值editTextName,而不用bundle传递数据。因为在FormOne.java中没有任何按钮来发送值editTextName。

先谢谢

4 个答案:

答案 0 :(得分:0)

edittext值保存在sharedpreferences edittext事件的ontextchangelistener()上,并将sharedpreferences中的数据转换为form2活动。

答案 1 :(得分:0)

第一个活动必须启动第二个活动,将String个对象作为参数传递。否则,您如何确保第一个活动真正开始并且用户在文本字段中键入内容?

如果你真的不想按需启动第二个活动,你唯一的选择是使用一个单独的存储库,如SQLiteDatabase,共享首选项,文件或存储在互联网上的东西,并使第二个选择一个从该存储库中值异步,最终提供一个默认值来计算用户没有明确保存任何内容的情况。

显然,第一次行动时必须在被要求时写入此存储库。但是这种设计对我来说可能看起来很麻烦(即通过持久存储读/写传递字符串)

答案 2 :(得分:0)

您正试图获得第二个活动中第一个活动中的编辑文本的参考。所以它可能会抛出空指针异常并导致崩溃。您无法在第二个活动的第一个活动中引用编辑文本。您将获得使用setcontentview()为该活动设置的视图的参考。

答案 3 :(得分:0)

首先你的应用程序会崩溃,因为你没有在你的xml中为第二个活动添加EditText而你在onCreate()方法中为第二个活动声明它。

其次,如果您想在不使用intent.putExtra(“”)的情况下检索活动之间的字符串;你可以按照以下方法做的方法:

1 - 您可以创建这样的独立类:

public class Myclass{
    private String myString;
    public void setString(String str){
    myString=str;
    }
    public String getString(){
    return myString;
    }
} 

2-在您的Activity1中,您可以通过

为该字符串赋值
String myString="What ever the string you have"
MyClass.setString(myString);

3 - 你可以在任何你想要的地方调用该字符串:

String myString=MyClass.getString():