我的代码定义如下。有两项重要活动。 Activity(1)显示了ViewFlipper中的一些图像。它使用方法直接加载所需的图像。 onOptionsItemSelected()
方法从链接的XML布局R.layout.browse
中定义的菜单中提取数据。另一种方法displaySelectedFlag()
获取从不同活动传递的标记参数,让我们将其称为活动(2)。
活动(1):
public class BrowserActivity extends AppCompatActivity implements SimpleGestureListener, View.OnClickListener {
public ViewFlipper vFlipper;
(...)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.browse);
vFlipper = (ViewFlipper) findViewById(R.id.viewFlipperBrowser);
(...)
} // onCreate() ends here
// this method below works fine:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
vFlipper.setDisplayedChild(item.getOrder());
return true;
}
// and this one doesn't:
public void displaySelectedFlag(int orderTag) {
vFlipper.setDisplayedChild(orderTag); // crashes here
}
}
活动(2):
public class ListActivity extends Activity implements View.OnClickListener {
private BrowserActivity browserActivity = new BrowserActivity();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
ImageButton imageA = (ImageButton) findViewById(R.id.img_a);
imageA.setOnClickListener(this);
ImageButton imageB = (ImageButton) findViewById(R.id.img_b);
imageB.setOnClickListener(this);
}
public void displayImageInfo(View view) {
String tagValue = (String) view.getTag();
int tagId = Integer.parseInt(tagValue);
Intent intent = new Intent(this, BrowserActivity.class);
startActivity(intent);
browserActivity.displaySelectedImage(imageId);
}
@Override
public void onClick(View view) {
displayImageInfo(view);
}
}
在我检查时,在activity(2)中调用的方法onClick()
获取ImageButton的ID并将其传递给activity(1)。不幸的是,我在调用ViewFlipper时得到一个NullPointerException(该行标记在上面的代码中,activity(1))。
知道为什么会这样吗?
答案 0 :(得分:1)
您无法从其他活动引用一个活动。您必须通过调用“startActivity”让Android OS创建Activity对象。将局部变量分配为Activity的实例实际上并不意味着任何事情(例如您对BrowserActivity的实例化)。 Apoorv的评论链接到关于这个主题的一篇体面的文章。
如果要将数据从一个Activity传递到另一个Activity,则需要在Intent的bundle中传递额外内容。这篇文章详细介绍:https://stackoverflow.com/a/819427/504252