如何使用多个按钮将数据从一个片段传递到另一个片段?
How to pass data from fragment to fragment using multiple buttons?
我有两个片段,Fragment-1 和 Fragment-2,在我的 Fragment-1 中我有三个按钮,在每个按钮的侦听器中我使用 bundle 发送数据,并试图进入 Fragment-2,但是应用程序崩溃并出现空指针异常
片段 1
rl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
All_Products tf = new All_Products();
Bundle bundle = new Bundle();
bundle.putString("catagory_name", "All");
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
rl1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
All_Products tf = new All_Products();
Bundle bundle = new Bundle();
bundle.putString("jorel", proidslug1);
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
rl2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
All_Products tf = new All_Products();
Bundle bundle = new Bundle();
bundle.putString("bestseller", proidslug2);
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
片段 2
Bundle bundle=this.getArguments();
cname=bundle.getString("catagory_name");
System.out.println("all >>>>>" + cname);
Bundle b1=this.getArguments();
jorlenm=b1.getString("jorel");
System.out.println("jorel>>>>>" + jorlenm);
if(cname.equals(bundle.getString("catagory_name")))
{
Toast.makeText(getActivity(),cname,Toast.LENGTH_LONG).show();
}
else if(jorlenm.equals(bundle.getString("jorel")))
{
Toast.makeText(getActivity(),jorlenm,Toast.LENGTH_LONG).show();
}
如果您单击 rl1
按钮,则传递给捆绑包的数据带有密钥 jorel
。
那么带有键 category_name
的 bundle 中的值将是 null
。然后通过使用空值检查你可能会得到一个异常。
所以你必须检查它是否null
。
试试这个
String cname = bundle.getString("catagory_name");
String jorelnm = bundle.getString("jorel");
String bestseller = bundle.getString("bestseller");
if (cname != null) {
Toast.makeText(getActivity(), cname, Toast.LENGTH_LONG).show();
} else if (jorlenm != null) {
Toast.makeText(getActivity(), jorlenm, Toast.LENGTH_LONG).show();
} //..
正如@boss 建议的那样,当 3 个按钮发送互斥数据时,您需要有 null 检查器。
Bundle bundle=this.getArguments();
cname=bundle.getString("catagory_name");
jorlenm=bundle.getString("jorel");
if(cname != null)
{
Toast.makeText(getActivity(),cname,Toast.LENGTH_LONG).show();
}
else if(jorlenm != null)
{
Toast.makeText(getActivity(),jorlenm,Toast.LENGTH_LONG).show();
}
我有两个片段,Fragment-1 和 Fragment-2,在我的 Fragment-1 中我有三个按钮,在每个按钮的侦听器中我使用 bundle 发送数据,并试图进入 Fragment-2,但是应用程序崩溃并出现空指针异常
片段 1
rl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
All_Products tf = new All_Products();
Bundle bundle = new Bundle();
bundle.putString("catagory_name", "All");
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
rl1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
All_Products tf = new All_Products();
Bundle bundle = new Bundle();
bundle.putString("jorel", proidslug1);
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
rl2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
All_Products tf = new All_Products();
Bundle bundle = new Bundle();
bundle.putString("bestseller", proidslug2);
tf.setArguments(bundle);
android.app.FragmentManager fm = getActivity().getFragmentManager();
android.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container_body, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
});
片段 2
Bundle bundle=this.getArguments();
cname=bundle.getString("catagory_name");
System.out.println("all >>>>>" + cname);
Bundle b1=this.getArguments();
jorlenm=b1.getString("jorel");
System.out.println("jorel>>>>>" + jorlenm);
if(cname.equals(bundle.getString("catagory_name")))
{
Toast.makeText(getActivity(),cname,Toast.LENGTH_LONG).show();
}
else if(jorlenm.equals(bundle.getString("jorel")))
{
Toast.makeText(getActivity(),jorlenm,Toast.LENGTH_LONG).show();
}
如果您单击 rl1
按钮,则传递给捆绑包的数据带有密钥 jorel
。
那么带有键 category_name
的 bundle 中的值将是 null
。然后通过使用空值检查你可能会得到一个异常。
所以你必须检查它是否null
。
试试这个
String cname = bundle.getString("catagory_name");
String jorelnm = bundle.getString("jorel");
String bestseller = bundle.getString("bestseller");
if (cname != null) {
Toast.makeText(getActivity(), cname, Toast.LENGTH_LONG).show();
} else if (jorlenm != null) {
Toast.makeText(getActivity(), jorlenm, Toast.LENGTH_LONG).show();
} //..
正如@boss 建议的那样,当 3 个按钮发送互斥数据时,您需要有 null 检查器。
Bundle bundle=this.getArguments();
cname=bundle.getString("catagory_name");
jorlenm=bundle.getString("jorel");
if(cname != null)
{
Toast.makeText(getActivity(),cname,Toast.LENGTH_LONG).show();
}
else if(jorlenm != null)
{
Toast.makeText(getActivity(),jorlenm,Toast.LENGTH_LONG).show();
}