Android Studio:TexView 不显示



我的texview遇到了一些问题,当我在第一个活动中使用m按钮时,我想打开第二个活动并显示我的texview以及我从第一个活动中获得的信息。但是当我使用ID.setText(intent_nom.getStringExtra("nom"));时,我的应用程序不再工作。你能帮我吗,谢谢。

这是我的第一个活动

package com.maze.maze;
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Button;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.widget.ImageView;
import java.io.InputStream;
import java.io.IOException;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.BitmapDrawable;

public class MainActivity extends AppCompatActivity {
RadioGroup radiogroup;
Button button_val;
EditText e_prenom;
EditText e_nom;
private static final String SAVED_TEXT_KEY = "some_key";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_val=findViewById(R.id.button_v);
radiogroup=findViewById(R.id.radiogroup);
e_prenom=findViewById(R.id.e_prenom);
e_nom=findViewById(R.id.e_nom);


button_val.setOnClickListener(new View.OnClickListener() {
@Override

public void onClick(View view){
int  laby =0;
switch (radiogroup.getCheckedRadioButtonId())
{
case R.id.radio_1: laby=1; break;
case R.id.radio_2: laby=2; break;
case R.id.radio_3: laby=3; break;
case R.id.radio_4: laby=4; break;
case R.id.radio_5: laby=5; break;
}
Intent intent_laby= new Intent();
intent_laby.putExtra("num_labyrinth",laby);
Intent intent_nom= new Intent();
intent_nom.putExtra("nom", e_nom.getText() );
Intent intent_prenom= new Intent();
intent_prenom.putExtra("prenom", e_prenom.getText() );
startActivity(new Intent(MainActivity.this, Activity_labyrinth.class));
}
});
}


}

这是我的第二个活动

package com.maze.maze;
import java.io.InputStream;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.content.res.Resources;
import android.widget.EditText;
import android.widget.TextView;
public class Activity_labyrinth extends AppCompatActivity {
TextView ID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ID=findViewById(R.id.ID);
Intent intent_nom  = getIntent();
ID.setText(intent_nom.getStringExtra("nom"));

setContentView(R.layout.activity_labyrinth);
}
}

这是我第二个活动的XML文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
tools:context=".Activity_labyrinth"
tools:visibility="visible">
<TextView
android:id="@+id/ID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffffff"
android:gravity="center_horizontal"
android:textColor="#000"
android:textSize="50dp"
android:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>

启动新活动时,您正在创建新Intent。在开始Activity_labyrinth的点击侦听器中尝试此操作:

Intent intent_nom = new Intent();
intent_nom.putExtra("nom", e_nom.getText() );
startActivity(intent_nom);

您正在创建 4 个不同的意图变量,最后在没有任何数据的情况下启动活动。 您可以使用以下代码启动活动,

Intent intent_laby= new Intent(MainActivity.this, Activity_labyrinth.class);
intent_laby.putExtra("num_labyrinth",laby);
intent_laby.putExtra("nom", e_nom.getText() );
intent_laby.putExtra("prenom", e_prenom.getText() );
startActivity(intent_laby);

希望会有所帮助!!

您的代码显示

  1. 您希望将数据从一个活动传递到另一个活动。

  2. 在这里,您使用意图。

因此,您应该在开始时使用该意图设置数据。

问题 1:您正在使用错误的意图对象分配数据。

Intent intent_nom= new Intent();
intent_nom.putExtra("nom", e_nom.getText());
startActivity(intent_nom);

问题 2:您应该发送字符串数据,因为您是通过getStringExtra("nom")接收数据的。

Intent intent_nom= new Intent();
intent_nom.putExtra("nom", e_nom.getText().toString());//Here need this
startActivity(intent_nom);

代码中有两个问题:

  1. 正在创建总共四个意图和 3 个带有值的意图,最后一个用于启动活动,您不需要这样做,只有一个意图能够发送值并从一项活动导航到另一项活动。
Intent intent_laby= new Intent();
intent_laby.putExtra("num_labyrinth",laby);
intent_laby.putExtra("nom", e_nom.getText().toString() );
intent_laby.putExtra("prenom", e_prenom.getText().toString() );
startActivity(new Intent(MainActivity.this, Activity_labyrinth.class));

另请注意,从编辑文本发送值时需要调用toString()

  1. InActivity_labyrinthsetContentView应该在findViewById之前调用,所以你的代码应该是:
setContentView(R.layout.activity_labyrinth);
ID=findViewById(R.id.ID);
Intent intent_nom  = getIntent();
ID.setText(intent_nom.getStringExtra("nom"));

在活动生命周期中,OnCreate 需要使用 XML 小部件后需要设置内容视图(视图(。

您在没有 setConentView 的情况下获得文本视图,需要使用 setConentView(( 设置您的 XML 视图(与您的活动绑定(您的活动。

您可以编写如下代码:

public class Activity_labyrinth extends AppCompatActivity {
TextView ID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_labyrinth);
ID=findViewById(R.id.ID);
Intent intent_nom  = getIntent();
ID.setText(intent_nom.getStringExtra("nom"));
//setContentView(R.layout.activity_labyrinth);
//Move This Line Below TextView Casting 
}
}

最新更新