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 に値を表示できます。

しかし、myapplicationは強制的に閉じます。バンドルでデータを渡さずに値editTextNameを取得するにはどうすればよいですか。FormOne.java には値 editTextName を送信するボタンがないためです。

前もって感謝します

4

4 に答える 4

0

2 番目のアクティビティの最初のアクティビティにある編集テキストの参照を取得しようとしています。そのため、null ポインター例外がスローされてクラッシュする可能性があります。2 番目のアクティビティで 1 番目のアクティビティの編集テキストを参照することはできません。そのアクティビティに対して setcontentview() を使用して設定しているビューの参照を取得します。

于 2012-12-01T09:35:52.293 に答える
0

edittext のonイベントにedittext値を保存し、form2 アクティビティからデータを取得します。sharedpreferencesontextchangelistener()sharedpreferences

于 2012-12-01T09:28:49.193 に答える
0

String最初のアクティビティは、オブジェクトをパラメーターとして渡して 2 番目のアクティビティを開始する必要があります。それ以外の場合、最初のアクティビティが実際に開始され、ユーザーがテキスト フィールドに何かを入力したことをどのように確認できますか?

オンデマンドで 2 番目のアクティビティを本当に開始したくない場合は、唯一のオプションは、SQLiteDatabase、共有設定、ファイル、またはインターネットに保存されている何かなどの別のリポジトリを使用し、2 番目のアクティビティに値を非同期的に選択させることです。最終的に、ユーザーが明示的に何も保存しなかった場合に備えて、デフォルト値をアカウントに提供します。

明らかに、最初のアクティビティは、要求されたときにこのリポジトリに書き込む必要があります。しかし、この設計は私には面倒に見えるかもしれません (つまり、永続的なストレージの読み取り/書き込みを介して文字列を渡す)

于 2012-12-01T09:32:04.313 に答える
0

最初にアプリケーションがクラッシュします。これは、2 番目のアクティビティの xml に EditText を追加せず、2 番目のアクティビティの onCreate() メソッドで宣言したためです。

2 つ目は、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 に答える