Android Fragment-Listview打开新的Fragment并传输数据

时间:2016-05-27 06:00:19

标签: android listview fragment

我有一个包含listview的片段,

ln -s /home/mysqk123/tmp/mysql.sock /var/lib/mysql/mysql.sock
mysql_secure_installation # Do your stuff
rm -rf /var/lib/mysql/mysql.sock

我想在选择时将数据从listiview传输到新片段。这是我的onItemClick

中的代码
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/containerMySubjects"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="15dp">

    <ListView
        android:id="@+id/lvSubjectLists"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>

</LinearLayout>

</LinearLayout>

这是我的新片段onCreateView

中的代码
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    InstructorFragmentSelectedSubject newFragment = new InstructorFragmentSelectedSubject();
    Bundle args = new Bundle();
    args.putString("code", code);
    args.putString("title", title);
    newFragment.setArguments(args);

    getFragmentManager().beginTransaction().replace(R.id.containerMySubjects, newFragment).commit();
}

2 个答案:

答案 0 :(得分:0)

尝试将LinearLayout更改为Frame Layout,看看会发生什么:) 我认为你的代码在listview下面添加片段,并且它有match_parent,所以它对用户是不可见的。

尽量避免使用子视图制作片段容器。最好使用listview创建新片段,然后添加到容器中。然后单击listitem替换视图。

// EDITED:

如果将listview更改为listview片段,则需要在片段之间进行通信。在listview中单击侦听器,您应该对活动进行回调,并且活动可以使用FragmentManager更改片段并将一些值放入新片段。

您可以在此处查看如何添加回调: https://developer.android.com/training/basics/fragments/communicating.html

答案 1 :(得分:0)

阅读Fragment Life Cycle尝试此代码。

private String code = null;
private String title = null;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_instructor_selected_subject, container, false);

        tvSelectedCode = (TextView) view.findViewById(R.id.tvSelectedCode);
        tvSelectedTitle = (TextView) view.findViewById(R.id.tvSelectedTitle);


        tvSelectedCode.setText(code);
        tvSelectedTitle.setText(title);

        return view;
    } 

     @Override 
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            if (getArguments() != null) {
              code = getArguments().getString("code");
              title = getArguments().getString("title");
              }

        }