2

我有 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 中获取值,并且值可以在带有Toast 的FormTwo.java 中显示。

但是我的应用程序强制关闭,我如何获得值editTextName,而不用捆绑传递数据。因为在 FormOne.java 中没有任何按钮可以发送值 editTextName。

提前致谢

4

4 回答 4

0

edittext将值保存到sharedpreferencesedittext事件中并从form2 活动中ontextchangelistener()获取数据。sharedpreferences

于 2012-12-01T09:28:49.193 回答
0

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

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

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

于 2012-12-01T09:32:04.313 回答
0

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

于 2012-12-01T09:35:52.293 回答
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():
于 2012-12-01T11:20:55.707 回答