【问题标题】:How can I pass the item String that I selected from ListView to another fragment? [duplicate]如何将我从 ListView 中选择的项目字符串传递给另一个片段? [复制]
【发布时间】:2016-01-20 12:34:40
【问题描述】:

我正在尝试将数据(我选择的字符串)从列表视图的一个片段传递到编辑文本中的另一个片段。在这种情况下怎么可能?

我可以使用捆绑包吗?如果是,怎么做?

第一个片段:

public class AirportPostFragment extends Fragment {

String stringsList[];
ArrayAdapter<String> adapter;
private ListView listViewAirports;
private EditText editSearch;
Context myContext;
XmlPullParser parser;
HashSet airport_list;
HashSet<String> list = new HashSet<>();

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_airportpost, container, false);

    listViewAirports = (ListView) rootView.findViewById(R.id.listView_airports);
    editSearch = (EditText) rootView.findViewById(R.id.search_airport);
    adapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_list_item_1, stringsList);

    listViewAirports.setAdapter(adapter);
    listViewAirports.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
            FragmentManager fm = getActivity().getFragmentManager();
            fm.beginTransaction().replace(R.id.content_main, new FinishPostFragment()).commit();
        }
    });

    searchAirport();
    return rootView;
}

第二个片段:

public class FinishPostFragment extends Fragment{

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_finishpost, container, false);

    return rootView;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.finish_post_button, menu);
}
}

【问题讨论】:

  • 这里几乎没有问题......每个问题都在互联网上得到了很好的记录(以及关于 SO 的无数类似问题)...... 1. 使用AdapterView.getItemAtPosition 2. 是的,你可以使用BundleFragment.set/getArguments

标签: java android listview android-fragments


【解决方案1】:

你应该使用Bundle 这是一个例子

FragmentManager fm = getActivity().getFragmentManager();
Fragment fragment = new FinishPostFragment();
Bundle bundle = new Bundle();
bundle.putString("data", "your string");
fragment.setArgument(bundle);
fm.beginTransaction().replace(R.id.content_main, fragment).commit();

在你的第二个片段中:

String data = getArguments().getString("data");

并且有一种更清洁的方法。在您的第二个片段中,添加一个 newInstance 函数:

public static final String DATA_TAG="data";
private String mData;
public static FinishPostFragment newInstance(String data) {
        Bundle args = new Bundle();
        args.putString(DATA_TAG, data);
        FinishPostFragment fragment = new FinishPostFragment();
        fragment.setArguments(args);
        return fragment;
}

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null)
            mData = getArguments().getString(DATA_TAG);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多