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);
}
});
}
答案 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传递的值设置文本。