单击按钮[2活动]更改Textview的文本

时间:2015-11-03 12:04:41

标签: java android

我的项目中有两个活动(ChooseLevel和ShowTraining)。在第一个活动中我有一个Button,在第二个活动中我有一个Textview。

我的问题是,当我尝试单击按钮(并以意图启动第二个活动)时,我想更改第二个活动的textview文本,但我的应用程序崩溃了。我已经在stackoverflow上搜索了一些帖子,但问题仍然存在。

这是第一堂课:

public class ChooseLevel extends AppCompatActivity {
Button firstlevel;
TextView tv;


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

    firstlevel = (Button)findViewById(R.id.firstlevelBtn);
    tv  = (TextView)findViewById(R.id.titleTextTraining); //this is the textview of the second activity

   firstlevel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //start the second activity   
            Intent showTrainings = new Intent(ChooseLevel.this, ShowTrainings.class);
            startActivity(showTrainings);
            tv.setText("Some text here"); //change the text of the textview

        }
    });
}

这两项活动的XML文件都可以。 我怎么解决? 谢谢大家

4 个答案:

答案 0 :(得分:1)

简单地说,你不能用findViewById()做你想做的事。

findViewById()在调用视图的内容中查找请求的视图。

因此,如果您从活动中调用它,它将在您使用setContentView()设置的contentView上查找视图,这就是为什么它返回null。

您应该通过Intent extra将文本传递给第二个活动,然后在设置第二个活动的contentView之前,您可以调用findViewById()并更改其文本。

通过意图传递文本

Intent showTrainings = new Intent(ChooseLevel.this, ShowTrainings.class);
showTraining.putStringExtra("extrakey","YourTextHere");

然后在另一边

String text = getIntent().getStringExtra("extrakey");

希望这有帮助。

答案 1 :(得分:0)

tv  = (TextView)findViewById(R.id.titleTextTraining); 

TextView 1时,您无法在Activity 2中获得Activity

您应该跳至Activity 2并更改其中的TextView

答案 2 :(得分:0)

将textText设置为第二个Activity的一种方法是将值从第一个Activity传递给第二个Activity,在这种情况下,您可以使用intent.putExtra()方法。那你怎么做的?

好吧,在第一个类中,即传递数据的类,

    public class ChooseLevel extends AppCompatActivity {
Button firstlevel;
TextView tv;


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

    firstlevel = (Button)findViewById(R.id.firstlevelBtn);
    //tv  = (TextView)findViewById(R.id.titleTextTraining); //this is the textview of the second activity

   firstlevel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //start the second activity   
            Intent showTrainings = new Intent(ChooseLevel.this, ShowTrainings.class);
            showTrainings.putExtra("TEXTID", "THE TEXT YOU WANT TO PASS");
            startActivity(showTrainings);


        }
    });
}

showTrainings课程中,您可以收到以下值:

    String receive;

if (savedInstanceState == null) {
            Bundle extras = getIntent().getExtras();
            if(extras == null) {
                receive= null;
            } else {
                receive= extras.getString("TEXTID");
            }
        } else {
            receive= (String) savedInstanceState.getSerializable("TEXTID");
        }

然后您可以将收到的文本设置为TextView,如:

  tv  = (TextView)findViewById(R.id.titleTextTraining);
 tv.setText(receive);

答案 3 :(得分:0)

这样做:

<强> ChooseLevel.java

public class ChooseLevel extends Activity {
    Button firstlevel;
    TextView tv;


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

        firstlevel = (Button)findViewById(R.id.firstlevelBtn);

        firstlevel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //start the second activity   
                Intent showTrainings = new Intent(ChooseLevel.this, ShowTrainings.class);
                showTrainings.putExtra("textValue", "Some Text");
                startActivity(showTrainings);
            }
        });
    }
}

<强> ShowTrainings.java

public class ShowTrainings extends Activity {
    Button firstlevel;
    TextView tv;


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

        tv  = (TextView)findViewById(R.id.titleTextTraining);
        String str = getIntent().getStringExtra("textValue");
        if(str != null) {
            tv.setText(str);
        }
    }
}