如何从另一个 Activity 更改 TextView 的值?
How to change value of TextView from another Activity?
在我尝试开发的应用程序中,我有一个布局 featured_workshop_layout
,其中包含带按钮的 CardView。每个按钮都显示相同的布局,但根据每张卡片显示不同的数据。我尝试了以下方法,但不断收到致命异常。
在此处检查按钮 1 (featured_workshop_layout)
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- android:background="#E1F5FE">
A CardView that contains a TextView -->
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="8dp"
android:padding="10dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/titleTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignStart="@+id/button1"
android:paddingBottom="16dp"
android:paddingTop="24dp"
android:text="Android 2.0"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24sp" />
<TextView
android:id="@+id/contentTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/titleTextView1"
android:layout_alignStart="@+id/titleTextView1"
android:layout_centerVertical="true"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="Venue: SJT 311 \n Time: 29/10/2015 5-7pm \n Note: Bring charged laptop"
android:textSize="14sp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="23dp"
android:layout_marginStart="23dp"
android:background="#0000"
android:onClick="showRegister"
android:tag="SITEAndroid 2.0"
android:padding="8dp"
android:text="Register"
android:textColor="#FFA000" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view1"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="8dp"
android:padding="10dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/titleTextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button3"
android:layout_alignParentTop="true"
android:layout_alignStart="@+id/button3"
android:paddingBottom="16dp"
android:paddingTop="24dp"
android:text="IEEE-SPS Core Committee Selections"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24sp" />
<TextView
android:id="@+id/contentTextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/titleTextView2"
android:layout_alignStart="@+id/titleTextView2"
android:layout_centerVertical="true"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="Venue: TT 724 \n Time: 30/10/2015 6-7.30pm"
android:textSize="14sp" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="24dp"
android:layout_marginStart="24dp"
android:background="#0000"
android:onClick="showRegister"
android:padding="8dp"
android:text="Register"
android:textColor="#FFA000" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view2"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="8dp"
android:padding="10dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button2"
android:layout_alignParentTop="true"
android:layout_alignStart="@+id/button2"
android:paddingBottom="16dp"
android:paddingTop="24dp"
android:text="IQ VIT DEXTER"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24sp" />
<TextView
android:id="@+id/textView21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_centerVertical="true"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="Venue: MB210\n Time: 31/10/2015 5.30pm\nContact: 9484356876"
android:textSize="14sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:background="#0000"
android:onClick="showRegister"
android:padding="8dp"
android:text="Register"
android:textColor="#FFA000" />
</RelativeLayout>
</android.support.v7.widget.CardView>
MainActivity.java
public void showRegister(View view)
{ String site = "SITE";
String taginfo = view.getTag().toString();
System.out.println(taginfo);
//check tag content
if(taginfo.contains(site)) {
System.out.println("tag has keyword site");
RegistrationForm.schoolName.setText(site);
}
startActivity(new Intent(MainActivity.this,
RegistrationForm.class));
}
RegistrationForm.java
public class RegistrationForm extends AppCompatActivity {
EditText rno;
EditText name;
TextView displayTemp;
MyDBHandler dbHandler;
public static TextView schoolName;
public static TextView workshopName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.registration_form);
rno = (EditText)findViewById(R.id.edit_rno);
name =(EditText)findViewById(R.id.edit_name);
schoolName = (TextView) findViewById(R.id.schoolName);
workshopName = (TextView) findViewById(R.id.workshopName);
displayTemp = (TextView)findViewById(R.id.textView3);
dbHandler = new MyDBHandler(this,null,null,1);
displayText();
}
我在 RegistrationForm.java
中将 TextView
声明为 public
,我想在其中显示详细信息。从 MainActivity
访问它以更改值时,出现以下异常。
FATAL EXCEPTION: main
Process: com.example.intodarkness.vitworkshop, PID: 9770
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View.onClick(View.java:4025)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View.onClick(View.java:4020)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.intodarkness.vitworkshop.MainActivity.showRegister(MainActivity.java:52)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View.onClick(View.java:4020)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
我猜你的问题出在这里:
if(taginfo.contains(site)) {
System.out.println("tag has keyword site");
RegistrationForm.schoolName.setText(site);
}
startActivity(new Intent(MainActivity.this,
RegistrationForm.class));
我建议您使用 Intent.putExtra()
而不是 static
变量将参数从一个 activity 发送到另一个。
在这里你可以找到一个例子如何做。
如果您想更改 Activity2
中 textview
的值,那么在从 Activity1 到 Activity2 时,只需设置 Intent.putExtra()
中的值并启动 activity 和在 Activity2
的 onCreate()
方法中,通过调用 getIntent.getExtras().getString('your_key');
获取意图值并更改 textview
值。
解决了。
我没有尝试从 MainActivity 访问所需的字段,而是从 MainActivity 中的 CardView 访问了所需的详细信息,并在注册表单中完成了其余操作,在那里我能够访问 registration_form.[= 的 TextViews 10=]
我使用 System.out.println() 语句来查找执行顺序,我发现 Activity 仅在 setText 语句之后被调用,这就是我收到 nullException 错误的原因。
在我尝试开发的应用程序中,我有一个布局 featured_workshop_layout
,其中包含带按钮的 CardView。每个按钮都显示相同的布局,但根据每张卡片显示不同的数据。我尝试了以下方法,但不断收到致命异常。
在此处检查按钮 1 (featured_workshop_layout)
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- android:background="#E1F5FE">
A CardView that contains a TextView -->
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="8dp"
android:padding="10dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/titleTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_alignParentTop="true"
android:layout_alignStart="@+id/button1"
android:paddingBottom="16dp"
android:paddingTop="24dp"
android:text="Android 2.0"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24sp" />
<TextView
android:id="@+id/contentTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/titleTextView1"
android:layout_alignStart="@+id/titleTextView1"
android:layout_centerVertical="true"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="Venue: SJT 311 \n Time: 29/10/2015 5-7pm \n Note: Bring charged laptop"
android:textSize="14sp" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="23dp"
android:layout_marginStart="23dp"
android:background="#0000"
android:onClick="showRegister"
android:tag="SITEAndroid 2.0"
android:padding="8dp"
android:text="Register"
android:textColor="#FFA000" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view1"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="8dp"
android:padding="10dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/titleTextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button3"
android:layout_alignParentTop="true"
android:layout_alignStart="@+id/button3"
android:paddingBottom="16dp"
android:paddingTop="24dp"
android:text="IEEE-SPS Core Committee Selections"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24sp" />
<TextView
android:id="@+id/contentTextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/titleTextView2"
android:layout_alignStart="@+id/titleTextView2"
android:layout_centerVertical="true"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="Venue: TT 724 \n Time: 30/10/2015 6-7.30pm"
android:textSize="14sp" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="24dp"
android:layout_marginStart="24dp"
android:background="#0000"
android:onClick="showRegister"
android:padding="8dp"
android:text="Register"
android:textColor="#FFA000" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view2"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_margin="8dp"
android:padding="10dp"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button2"
android:layout_alignParentTop="true"
android:layout_alignStart="@+id/button2"
android:paddingBottom="16dp"
android:paddingTop="24dp"
android:text="IQ VIT DEXTER"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24sp" />
<TextView
android:id="@+id/textView21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_centerVertical="true"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:text="Venue: MB210\n Time: 31/10/2015 5.30pm\nContact: 9484356876"
android:textSize="14sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:background="#0000"
android:onClick="showRegister"
android:padding="8dp"
android:text="Register"
android:textColor="#FFA000" />
</RelativeLayout>
</android.support.v7.widget.CardView>
MainActivity.java
public void showRegister(View view)
{ String site = "SITE";
String taginfo = view.getTag().toString();
System.out.println(taginfo);
//check tag content
if(taginfo.contains(site)) {
System.out.println("tag has keyword site");
RegistrationForm.schoolName.setText(site);
}
startActivity(new Intent(MainActivity.this,
RegistrationForm.class));
}
RegistrationForm.java
public class RegistrationForm extends AppCompatActivity {
EditText rno;
EditText name;
TextView displayTemp;
MyDBHandler dbHandler;
public static TextView schoolName;
public static TextView workshopName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.registration_form);
rno = (EditText)findViewById(R.id.edit_rno);
name =(EditText)findViewById(R.id.edit_name);
schoolName = (TextView) findViewById(R.id.schoolName);
workshopName = (TextView) findViewById(R.id.workshopName);
displayTemp = (TextView)findViewById(R.id.textView3);
dbHandler = new MyDBHandler(this,null,null,1);
displayText();
}
我在 RegistrationForm.java
中将 TextView
声明为 public
,我想在其中显示详细信息。从 MainActivity
访问它以更改值时,出现以下异常。
FATAL EXCEPTION: main Process: com.example.intodarkness.vitworkshop, PID: 9770 java.lang.IllegalStateException: Could not execute method of the activity at android.view.View.onClick(View.java:4025) at android.view.View.performClick(View.java:4785) at android.view.View$PerformClick.run(View.java:19884) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View.onClick(View.java:4020) at android.view.View.performClick(View.java:4785) at android.view.View$PerformClick.run(View.java:19884) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.intodarkness.vitworkshop.MainActivity.showRegister(MainActivity.java:52) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at android.view.View.onClick(View.java:4020) at android.view.View.performClick(View.java:4785) at android.view.View$PerformClick.run(View.java:19884) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
我猜你的问题出在这里:
if(taginfo.contains(site)) {
System.out.println("tag has keyword site");
RegistrationForm.schoolName.setText(site);
}
startActivity(new Intent(MainActivity.this,
RegistrationForm.class));
我建议您使用 Intent.putExtra()
而不是 static
变量将参数从一个 activity 发送到另一个。
在这里你可以找到一个例子如何做。
如果您想更改 Activity2
中 textview
的值,那么在从 Activity1 到 Activity2 时,只需设置 Intent.putExtra()
中的值并启动 activity 和在 Activity2
的 onCreate()
方法中,通过调用 getIntent.getExtras().getString('your_key');
获取意图值并更改 textview
值。
解决了。 我没有尝试从 MainActivity 访问所需的字段,而是从 MainActivity 中的 CardView 访问了所需的详细信息,并在注册表单中完成了其余操作,在那里我能够访问 registration_form.[= 的 TextViews 10=]
我使用 System.out.println() 语句来查找执行顺序,我发现 Activity 仅在 setText 语句之后被调用,这就是我收到 nullException 错误的原因。