1

最初のアクティビティには 2 つのボタンがあり、2 つ目のアクティビティには 1 つのテキストビューがあります

私が必要とするのは、最初のボタンをクリックすると2番目のアクティビティが開き、テキストビューが表示されます(こんにちは) 2番目のボタンをクリックすると、2番目のアクティビティが開き、テキストビューが表示されます(お元気ですか)

これは最初のアクティビティ レイアウトです

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ScrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:scrollbars="none"
tools:context=".DailyPrayersActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn1"
        style="@style/Button_Normal"
        android:background="@drawable/btn01"
        android:onClick="hello"
        android:text="@string/hello" />

    <Button
        android:id="@+id/btn2"
        style="@style/Button_Normal"
        android:background="@drawable/btn01"
        android:onClick="hru"
        android:text="@string/hru" />

</LinearLayout>

</ScrollView>

これは最初のアクティビティの Java クラスです

package com.daily.morning;

public class FirstActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_1);
}

public void hello(View v) {
    Intent i1 = new Intent(firstActivity.this, SecondActivity.class);
    SecondActivity.textview.setText("Hello");
    startActivity(i1);
    finish();
}

public void hru(View v) {
    Intent i2 = new Intent(FirstActivity.this, SecondActivity.class);
    SecondActivity.textview.setText("good morning");
    startActivity(i2);
    finish();
}

}

最初のボタンまたは2番目のボタンをクリックすると、アプリケーションが強制終了します

これはログキャットです

>>09-06 14:26:24.054: E/AndroidRuntime(30993): FATAL EXCEPTION: main
09-06 14:26:24.054: E/AndroidRuntime(30993): java.lang.IllegalStateException: Could not execute method of the activity
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.view.View$1.onClick(View.java:3699)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.view.View.performClick(View.java:4223)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.view.View$PerformClick.run(View.java:17275)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.os.Handler.handleCallback(Handler.java:615)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.os.Looper.loop(Looper.java:137)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.app.ActivityThread.main(ActivityThread.java:4898)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at java.lang.reflect.Method.invokeNative(Native Method)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at java.lang.reflect.Method.invoke(Method.java:511)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:103)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at dalvik.system.NativeStart.main(Native Method)
09-06 14:26:24.054: E/AndroidRuntime(30993): Caused by: java.lang.reflect.InvocationTargetException
09-06 14:26:24.054: E/AndroidRuntime(30993):    at java.lang.reflect.Method.invokeNative(Native Method)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at java.lang.reflect.Method.invoke(Method.java:511)
09-06 14:26:24.054: E/AndroidRuntime(30993):    at android.view.View$1.onClick(View.java:3694)
09-06 14:26:24.054: E/AndroidRuntime(30993):    ... 12 more
09-06 14:26:24.054: E/AndroidRuntime(30993): Caused by: java.lang.NullPointerException
09-06 14:26:24.054: E/AndroidRuntime(30993):    at com.daily.morning.FirstActivity.hello(FirstActivity.java:38)
09-06 14:26:24.054: E/AndroidRuntime(30993):    ... 15 more
4

5 に答える 5

2

Activity を呼び出して、その Activity にデータを送信する必要があります。

Intent i2 = new Intent(FirstActivity.this, SecondActivity.class);
i2.putExtra("key","good_morning");
startActivity(i2);

そして、onCreate() メソッドの 2 番目のアクティビティで:

Intent n = getIntent();
String mrng = n.getStringExtras("key");
textview.setText(mrng);

次のように配置する必要があります。

i2.putExtra("key",getResource().getString(R.string.yourstring));

SecondActivityクラスを AndroidManifest ファイルに追加します。

はい、テキストビューを初期化していない可能性があります...またはそのIDが見つかりません..

于 2013-09-06T11:36:38.390 に答える
2

あなたTextViewは別の.Firts にあるので、 andSecondActivityを介して XML 経由でフェッチする必要がありますが、既に独自のもの です。フェッチは完全に間違った順番です。setContentView()findViewById()FirstActivityXML LayoutView

BundlefromFirstActivityで値を渡し、そこに取得することでSecondActivity目標を達成する必要があります。Key

これらを達成する方法の一部を次に示します。

 public void hello(View v)
 {
  Intent i1 = new Intent(firstActivity.this, SecondActivity.class);
  i.putExtra("KEY",YourData); // i.putExtra("greetings", "Hello"); --> Hello is data and greeting is key to fetch from.
  startActivity(i1);
  finish();
 }

SecondActivity クラス内

Bundleから送信しFirstActivityたものSecondActivityを取得し、から渡したものvalueに対して取得する必要があります。KEYFirstActivity

Bundle extras = getIntent().getExtras();
if(extras !=null) 
{
String value = extras.getString("KEY"); //      String value = extras.getString("greetings"); --> which will fetch data from key greetings to value. Thus value now contains Hello.
TextView.setText(value);
 }

注:に存在しないメソッドsetText()を呼び出そうとすると、ケースで例外がスローされます。それが RunTime がスローする理由ですTextViewFirstActivityIllegalStateException

于 2013-09-06T11:38:31.623 に答える
0

Observer Patter androidを読むことをお勧めします

これをありがとう、あなたはあなたがやりたいことをします:)

于 2013-09-06T11:36:56.367 に答える
0

最初のクラスでは、コードを次のように変更する必要があります。

public void hello(View v) {
Intent intent = new Intent(firstActivity.this, SecondActivity.class);
intent.putextra("data","Hello");    //Pass the value to the intent for another class
finish();                          //If you want to finish your current activity
startActivity(intent);

}

public void hru(View v) {
Intent intent = new Intent(firstActivity.this, SecondActivity.class);
intent.putextra("data","How are You ?"); 
finish();                          
startActivity(intent);

}

そして SecondActivity クラスで

public class SecondActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);

//Get the value from the intent
Intent intent = getIntent();
String Msg = intent.getStringExtras("data"); //the parameter "data" here defines the same name as you have used while passing the argument to intent in first class

//Get your textView
TextView textView=(TextView)findViewById(R.id.textView1);
textview.setText(Msg);
....

}
于 2013-09-06T12:49:40.230 に答える
0

このようなコードを試してください

最初のアクティビティ

public void hello(View v) {
  Intent i1 = new Intent(firstActivity.this, SecondActivity.class);
  i1.putExtra("msg","Hello");
  startActivity(i1);
  finish();
}

public void hru(View v) {
  Intent i2 = new Intent(FirstActivity.this, SecondActivity.class);
  i2.putExtra("msg","How are you ?");
  startActivity(i2);
  finish();
}

そして、onCreate() メソッドの 2 番目のアクティビティで:

textview=(TextView)findViewById(R.id.textview);
Intent n = getIntent();
String mrng = n.getStringExtras("msg");
textview.setText(mrng);

string.xml から文字列を取得する

 String myString=getResources().getString("STRING_NAME");
于 2013-09-06T11:44:09.783 に答える