提问人:Antonely93 提问时间:10/27/2023 更新时间:10/27/2023 访问量:27
如何从MainActivity正确调用Fragment?
How to Call properly Fragment from MainActivity?
问:
我有从 MainActivity 类调用的 Fragment :-) 。
以下是片段代码:
public class PersonFragment extends Fragment {
private static final String ARG_NAME = "name";
private static final String ARG_FIRSTNAME = "firstname";
ListView lst;
String[] name = {"Dockar","Nilson"};
String[] firstname = {"Jack","Michel"};
public static PersonFragment newInstance(String[] name, String[] firstname) {
PersonFragment fragment = new PersonFragment();
Bundle args = new Bundle();
args.putStringArray(ARG_NAME, name);
args.putStringArray(ARG_FIRSTNAME, firstname);
fragment.setArguments(args);
return fragment;
}
Activity mainActivity;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.person_fragment, container, false);
lst = view.findViewById(R.id.listviewperson);
CustomeListviewAdapterTest customeListview = new CustomeListviewAdapterTest(this.mainActivity,name,firtname);
lst.setAdapter(customeListview);
lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
if(position == 0) {
Intent intent = new Intent(getContext(),Jack.class);
startActivity(intent);
}if(position == 1) {
Intent intent = new Intent(getContext(),Michel.class);
startActivity(intent);
}
}
});
if (getArguments() != null) {
name = getArguments().getStringArray(ARG_NAME);
firstname = getArguments().getStringArray(ARG_FIRSTNAME);
}
return view;
}
我不知道是否一切正常,我在Android Studio IDE上没有错误。
现在我想从 MainActivity 调用它。所以我把这个放在菜单上:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.drawer_person:
PersonFragment fragment = PersonFragment.newInstance(HAVE ERROR HERE);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).addToBackStack(null).commit();
break;
在newInstance()上,我不知道如何从我的数组中调用字符串数据:
String[] 名称
和
字符串[] 名字
有人可以帮我怎么做吗?
问候
答:
0赞
Gastón Saillén
10/27/2023
#1
看起来你想在创建字符串数组的实例时将字符串数组 name 和 firstname 传递给你。为此,您需要修改 newInstance 方法以接受这些数组作为参数。这是你如何做到的:PersonFragment
在类中,修改 newInstance 方法,如下所示:PersonFragment
public static PersonFragment newInstance(String[] name, String[] firstname) {
PersonFragment fragment = new PersonFragment();
Bundle args = new Bundle();
args.putStringArray(ARG_NAME, name);
args.putStringArray(ARG_FIRSTNAME, firstname);
fragment.setArguments(args);
return fragment;
}
现在,在 中,您可以使用字符串数组作为参数调用此方法,如下所示:MainActivity
PersonFragment fragment = PersonFragment.newInstance(name, firstname);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).addToBackStack(null).commit();
这样,在创建 PersonFragment 的实例时,将 name 和 firstname 数组传递给 PersonFragment,并且这些值将在 fragment 中访问。通过此修改,您的代码应该可以正常工作。
评论
0赞
Antonely93
10/27/2023
你好加斯顿, 感谢您:)回复。您在上面给出的关于 NewInstance 的代码与我拥有的代码相同?你忘了什么吗?在我的MainActivity上,我输入了名字,名字,就像你说的那样,但它不起作用。它说:无法解析符号“name”和无法解析符号“fistname”:(。
评论