Android - 根据listview项目点击的Inflate片段

时间:2017-01-26 06:12:23

标签: android listview android-fragments android-arrayadapter

如何在Fragment内显示字符串/文字,具体取决于我ListView中点击的项目?

这就是ListView在视觉上的样子---

enter image description here

当我点击Say Hello时,我想要显示hello,当我点击Say Bye时,我想要显示再见...

enter image description here

MainActivity.java

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ViewPager vp = (ViewPager) findViewById(R.id.n_Viewpager);
        this.addPages(vp);

    }

    //ADD ALL PAGES
    private void addPages(ViewPager pager) {
        MyFragPagerAdapter adapter = new MyFragPagerAdapter(getSupportFragmentManager());
        adapter.addPage(new ContainerFragment());

        //SET ADAPTER TO PAGER
        pager.setAdapter(adapter);

    }
}

TestFragment.java

public class TestFragment extends ListFragment {

    //Setting the name of each event
    String[] options = {"Say Hello", "Say Bye"};
    ArrayAdapter<String> adapter;

    //Inflating the view with the fragment
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        adapter = new ArrayAdapter<>(getActivity(), R.layout.listitem, R.id.textview, options);

        setListAdapter(adapter);
        return super.onCreateView(inflater, container, savedInstanceState);

    }

    //Click events
    @Override
    public void onStart() {
        super.onStart();

        getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View v, int pos, long l) {
                switch (pos) {
                    case 0:
                            getParentFragment().getChildFragmentManager().beginTransaction().replace(R.id.fragment_container_root_view, new SaySomethingFragment()).addToBackStack("").commit();

                        break;
                    case 1:

                        break;

                }

            }
        });
    }

}

ContainerFragment.java

public class ContainerFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_container, container, false);
            getChildFragmentManager().beginTransaction().replace(R.id.fragment_container_root_view, new TestFragment()).commit();
        return view;
    }
}

saysomething_fragment.xml

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center_vertical"
        android:id="@+id/speech_textview"
        android:text="HELLLLOOO"
        android:textSize="40dp" />


</LinearLayout>

1 个答案:

答案 0 :(得分:1)

new SaySomethingFragment()移至单独的变量。

使用该实例的setArguments方法传递一个额外的字符串

在你的片段中,你可以使用getArguments()并获得额外的字符串