Android - 根据点击的列表视图项目膨胀片段

Android - Inflate fragment depending on listview item clicked

如何根据在 ListView 中单击的项目在 Fragment 中显示 string/text?

这是我的 ListView 的视觉效果---

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

.

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>

new SaySomethingFragment() 移动到一个单独的变量。

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

在您的 Fragment 中,您可以使用 getArguments() 并获取额外的字符串

您可以创建一个包,然后设置一个字符串作为参数传递给您的片段。

Bundle bundle =new Bundle();
bundle.putString("variable","value");

您需要为片段设置参数

.setArguments(bundle);

然后在片段的 onCreate 方法中,您可以检索数据

Bundle bundle=getArguments();
String value=bundle.getString("variable");

然后您只需将文本设置到您的 textView

Textview textview=(TextView)view.findViewById(R.id.textview);
textView.setText(value);