也许这是一个非常愚蠢的问题。但我坚持了5个小时,因为这个二传手吸气。
我有类Home_Fragment,那里有值id_product .. 这是我的Home_Fragment类
public class Home_Fragment extends ListFragment {
private Detail_Produk dp;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
dp = new Detail_Produk("1");
//** After this i call another activity but not Detail_Produk
}
和我的Detail_Produk课程
String test;
View v;
public Detail_Produk() {
super();
}
public Detail_Produk(String test) {
super();
this.test = test;
}
public String getIDProduk() {
return test;
}
public void setIDProduk(String test) {
this.test = test;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.detail_produk, container, false);
Toast.makeText(getActivity(), "ID : " + getIDProduk().toString(), Toast.LENGTH_SHORT).show();
return v;
}
当我从另一个活动(不是Home_Fragment)调用活动Detail_Produk时。在线Toast它给我错误Java.Lang.NullPointerException。
我的代码错误或者我不能因为我没有从Home_Fragment调用Detail_Product Activity?
或者我应该使用共享偏好设置?
之前感谢:)
答案 0 :(得分:1)
此处的问题是,您Detail_Produk
中明确创建的Home_Fragment
实例(并将test
值传递给)会在{{onActivityCreated()
时丢失1}}完成。
当您的其他活动请求启动onCreateView()
活动时,Android框架会实例化实际调用Detail_Produk
的实例。该实例没有设置test
值,因此您获得了NPE。
您应该通过Intent
额外传递此值。请查看此Android开发人员教程,了解Activity
如何从启动它的Intent
中检索数据。
http://developer.android.com/training/basics/firstapp/starting-activity.html#ReceiveIntent
答案 1 :(得分:0)
dp = new Detail_Produk(1);
1
不是字符串。而Detail_Produk没有接受整数参数的构造函数。不知道这里发生了什么。你的代码不应该编译,更不用说barf了NPE,我假设在这里getIDProduk()。toString()
答案 2 :(得分:0)
我认为您应该使用共享首选项,因此值仍将保留 另一种可以在Home_Fragment中创建静态变量的方法,在其中保存值并在Detail_Produk类中访问它