如何从MainActivity正确调用Fragment?

How to Call properly Fragment from MainActivity?

提问人:Antonely93 提问时间:10/27/2023 更新时间:10/27/2023 访问量:27

问:

我有从 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[] 名称

字符串[] 名字

有人可以帮我怎么做吗?

问候

java android-studio android-fragments android-activity

评论


答:

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”:(。