如何使按钮显示新页面并在新页面中添加textview的指定文本?

时间:2014-08-30 23:25:38

标签: android

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1);
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            TextView tView = (TextView) findViewById(R.id.tView);
            String myText = "this is the text";
            // note this textview is in the Newactivity layout. A null pointer exception is thrown here
            tView.setText(myText);
            //this moves theactivity1 intent to the NewActivity intent. It works        
            Intent newActIntent = new Intent(view.getContext(),NewActivity.class);
            startActivity(newActIntent);

        }
    });
}

3 个答案:

答案 0 :(得分:-1)

如果您尚未设置首先属于的布局,则无法访问该视图。创建NewActivity时,您将设置textview的内容。

要实现这一点,您将为启动新活动的intent提供一个Extra String参数。

public class YourActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.your_layout); // this has to be called before accessing views 
     Button btn = (Button) findViewById(R.id.btn);

     btn.setOnClickListener(new View.OnClickListener() {
       @Override
        public void onClick(View view) {
         Intent newActIntent = new Intent(view.getContext(),NewActivity.class);
         String myText = "this is the text";
         newActIntent.putExtra("TextViewContent",mText);
         startActivity(newActIntent);
       }
     });        
    }

}

public class NewActivity extends Activity {

  protected void onCreate(Bundle savedInstanteState) {
   super.onCreate(savedInstanceState);
   Intent intent = getIntent();
   String stringContent = intent.getStringExtra("TextViewContent");
   setContentView(R.layout.your_new_activity);
   TextView textview = ( TextView) findViewById(R.id.tView);
   textview.setText(stringContent);

  }

}

答案 1 :(得分:-1)

您使用的代码是错误的,因为您无法使用findViewById来获取不在当前布局中的视图。

您可以执行以下操作:

  • 在第一个Activity onClick方法中,在创建Intent之后,将所需的文本放在一个额外的内容中:

    newActIntent.putExtra("name", "some text");

  • 在第二个Activity的onCreate方法中:

    TextView tView = (TextView) findViewById(R.id.tView); String myText= getIntent().getExtras().getString("name"); tView.setText(myText);

修改

您有2项活动:

活动A 我认为您发布的代码与此活动相对应。它将是:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity1);
    Button btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View view) {
            // TextView tView = (TextView) findViewById(R.id.tView);


            Intent newActIntent = new Intent(view.getContext(),NewActivity.class);
            String myText = "this is the text";
            newActIntent.putExtra("name", myText);   // Adding the extra
            startActivity(newActIntent);

        }
    });
}

活动B

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity2);

    TextView tView = (TextView) findViewById(R.id.tView);
    String myText = getIntent().getExtras().getString("name");  // Retrieving the extra
    tView.setText(myText);

    //...
}

答案 2 :(得分:-1)

您应该使用

将字符串值传递给NewActivity 第一个活动中的

newActIntent.putExtra("someKey", myText);

你的onClick方法应该是这样的:

public void onClick(View view) {

        String myText = "this is the text";
        Intent newActIntent = new Intent(view.getContext(),NewActivity.class);
        newActIntent.putExtra("someKey", myText);
        startActivity(newActIntent);
}

然后,在NewActivity上,您应检索存储在第一个活动中的someKey值,并使用提取的值设置TextView文本:

String textValue = intent.getExtras().getString("someKey");
TextView tView = (TextView) findViewById(R.id.tView);
tView.setText(textValue);

在尝试在第一个活动中设置文本时,你得到NullPointerException的原因是因为findViewById(id)将尝试在当前活动的布局中找到具有指定ID的视图,而不是每个你有的活动。因此,您应首先启动声明TextView的Activity,使用findViewById(id)方法检索TextView,然后根据使用Intent传递的值设置文本。