无法将数据从 Activity 传递到片段
Unable to pass data from Activity to fragment
我是 android
的新手。我想将数据从 activity
传递到 fragment
。我看到了几个问题,他们给了我一个解决方案。解决方案通过 bundle
传递数据。我尝试了堆栈溢出的解决方案。但是并不能帮助我解决这个问题。它显示 Null pointer Exception
。奇怪的是,每个答案都有这样的评论,指出空指针异常错误并有很多赞成票。那么将数据从 activity 传递到片段
的正确方法是什么
这是Activity代码:
我使用了带有 2 个片段的底部导航栏
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener=new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment=null;
switch (item.getItemId())
{
case R.id.home_tab:
selectedFragment =new home_fragment();
Log.w("SelecetedFra", "Selfragloaded");
Bundle bundle = new Bundle();
bundle.putString("board_name", "cbse");
bundle.putString("class_name", "12th");
selectedFragment.setArguments(bundle);
break;
case R.id.analytics_tab:
selectedFragment =new analytics_fragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
return true;
}
};
片段代码:
public class home_fragment extends Fragment {
private ViewGroup placeholder;
String board_name;
String class_name;
private View view;
public home_fragment() {
}
// TODO: Rename and change types and number of parameters
public static home_fragment newInstance(String param1, String param2) {
home_fragment fragment = new home_fragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// In here, I am getting the data
Bundle bundle = this.getArguments();
Log.w("bundle ", String.valueOf(bundle));
board_name = getArguments().getString("board_name");
class_name = getArguments().getString("class_name");
Log.w("homeFragBundle",class_name+""+board_name);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view=inflater.inflate(R.layout.fragment_home_fragment_loader, container, false);
placeholder = (ViewGroup) view;
return placeholder;
}
}
我遇到的错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
我不知道如何传递数据。每个人都建议我通过 bundle 传递数据。但它给了我 null pointer exception
。请帮我解决一些问题。
我觉得我给别人的答案在下面post:
也可以应用于您的案例。 ViewModel 范式巧妙而高效。尝试在 activity 和片段之间交换数据,也可以在片段与其他片段之间交换数据。
我在我的一个项目中也遇到过此类问题。我使用另一种方法将数据从 activity 传递到片段而不使用 bundle
.
将包值分配给 Activity 中的变量并使其成为 public。
public String board_name = "cbse"
public String class_name = "12th"
现在在片段方面,
像下面这样调用变量并将其分配给片段中的字符串
YourActivityName myActivity = (YourActivityName) getActivity();
board_name = myActivity.board_name;
class_name = myActivity.class_name;
现在您可以获取值并将它们用于片段中的进一步处理。
我是 android
的新手。我想将数据从 activity
传递到 fragment
。我看到了几个问题,他们给了我一个解决方案。解决方案通过 bundle
传递数据。我尝试了堆栈溢出的解决方案。但是并不能帮助我解决这个问题。它显示 Null pointer Exception
。奇怪的是,每个答案都有这样的评论,指出空指针异常错误并有很多赞成票。那么将数据从 activity 传递到片段
这是Activity代码:
我使用了带有 2 个片段的底部导航栏
private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener=new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment=null;
switch (item.getItemId())
{
case R.id.home_tab:
selectedFragment =new home_fragment();
Log.w("SelecetedFra", "Selfragloaded");
Bundle bundle = new Bundle();
bundle.putString("board_name", "cbse");
bundle.putString("class_name", "12th");
selectedFragment.setArguments(bundle);
break;
case R.id.analytics_tab:
selectedFragment =new analytics_fragment();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
return true;
}
};
片段代码:
public class home_fragment extends Fragment {
private ViewGroup placeholder;
String board_name;
String class_name;
private View view;
public home_fragment() {
}
// TODO: Rename and change types and number of parameters
public static home_fragment newInstance(String param1, String param2) {
home_fragment fragment = new home_fragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// In here, I am getting the data
Bundle bundle = this.getArguments();
Log.w("bundle ", String.valueOf(bundle));
board_name = getArguments().getString("board_name");
class_name = getArguments().getString("class_name");
Log.w("homeFragBundle",class_name+""+board_name);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view=inflater.inflate(R.layout.fragment_home_fragment_loader, container, false);
placeholder = (ViewGroup) view;
return placeholder;
}
}
我遇到的错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
我不知道如何传递数据。每个人都建议我通过 bundle 传递数据。但它给了我 null pointer exception
。请帮我解决一些问题。
我觉得我给别人的答案在下面post:
也可以应用于您的案例。 ViewModel 范式巧妙而高效。尝试在 activity 和片段之间交换数据,也可以在片段与其他片段之间交换数据。
我在我的一个项目中也遇到过此类问题。我使用另一种方法将数据从 activity 传递到片段而不使用 bundle
.
将包值分配给 Activity 中的变量并使其成为 public。
public String board_name = "cbse"
public String class_name = "12th"
现在在片段方面,
像下面这样调用变量并将其分配给片段中的字符串
YourActivityName myActivity = (YourActivityName) getActivity();
board_name = myActivity.board_name;
class_name = myActivity.class_name;
现在您可以获取值并将它们用于片段中的进一步处理。