【问题标题】:How to change value of TextView from another Activity?如何从另一个 Activity 更改 TextView 的值?
【发布时间】:2023-03-28 17:09:01
【问题描述】:

在我尝试开发的应用程序中,我有一个布局featured_workshop_layout,带有带有按钮的 CardViews。每个按钮显示相同的布局,但基于每张卡片具有不同的数据。我尝试了以下方法,但不断收到 FATAL Exception。

在此处查看按钮 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 访问它以更改值时,出现以下异常。

致命异常:主要 进程:com.example.intodarkness.vitworkshop,PID:9770 java.lang.IllegalStateException:无法执行活动的方法 在 android.view.View$1.onClick(View.java:4025) 在 android.view.View.performClick(View.java:4785) 在 android.view.View$PerformClick.run(View.java:19884) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4020) 在 android.view.View.performClick(View.java:4785) 在 android.view.View$PerformClick.run(View.java:19884) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.setText(java.lang.CharSequence)' 在 com.example.intodarkness.vitworkshop.MainActivity.showRegister(MainActivity.java:52) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4020) 在 android.view.View.performClick(View.java:4785) 在 android.view.View$PerformClick.run(View.java:19884) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

【问题讨论】:

    标签: android android-activity textview android-cardview


    【解决方案1】:

    我猜你的问题在这里:

    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 变量将参数从一个活动发送到另一个活动。

    在这里https://stackoverflow.com/a/3510771/2219237你可以找到一个例子。

    【讨论】:

    • 但是为什么这种方法不起作用? stackoverflow.com/questions/6605588/…
    • 查看您提供的链接“但请确保在其他活动中使用之前初始化该 TextView 对象......”。在您的情况下,您尝试将文本设置为 schoolName,但尚未调用 RegistrationForm.onCreate(),因此 schoolName 的值为 null。
    • 关于如何解决它的任何建议?我试着写 startActivity(new Intent(this, RegistrationForm.class));在按钮上调用函数的第一行单击 showRegister()
    【解决方案2】:

    如果您想在Activity2 中更改textview 的值,那么在从Activity1 转到Activity2 时,只需在Intent.putExtra() 中设置值并启动活动,然后在Activity2onCreate() 方法中,获取通过调用getIntent.getExtras().getString('your_key'); 来更改意图值并更改textview 值。

    【讨论】:

      【解决方案3】:

      解决了。 我没有尝试从 MainActicity 访问所需的字段,而是从 MainActivity 的 CardView 访问了所需的详细信息,并在注册表中执行了其余操作,在那里我可以访问 registration_form 的 TextViews。

      我使用 System.out.println() 语句来查找执行顺序,我发现只有在 setText 语句之后才调用 Activity,这就是我收到 nullException 错误的原因。

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 2018-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多