Java Android-来自ArrayAdapter的片段

Java Android-来自ArrayAdapter的片段,java,android,listview,android-fragments,Java,Android,Listview,Android Fragments,目前,我有一个活动,其中有一个viewpager,它会膨胀一个listfragment。 当用户点击listview中的一个项目时,我想膨胀一个新的片段 Test.java public class Test extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

目前,我有一个活动,其中有一个viewpager,它会膨胀一个listfragment。 当用户点击listview中的一个项目时,我想膨胀一个新的片段

Test.java

public class Test extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        final Toolbar toolbar;
        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);


        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 TestFragment());

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

    }
}
布局活动测试

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="tutorial.com.ScratchGolfer.Test">

    <RelativeLayout
        android:id="@+id/nav"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/appbarr"
            >

            <include
                android:id="@+id/app_bar"
                layout="@layout/app_bar" />


        </android.support.design.widget.AppBarLayout>

            <android.support.v4.view.ViewPager
                android:id="@+id/n_Viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/appbarr"
                app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"
                />

    </RelativeLayout>


</RelativeLayout>

TestFragment.java

public class TestFragment extends ListFragment {

    //Setting the name of each event
    String[] options = {"1", "2", "3", "4", "5", "6", "7"};
    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:
                        Intent intent0 = new Intent(v.getContext(), NewActivity.class);
                        v.getContext().startActivity(intent0);
                        break;
                    case 1:

                        break;

                }

            }
        });
    }
}
公共类TestFragment扩展了ListFragment{
//设置每个事件的名称
字符串[]选项={“1”、“2”、“3”、“4”、“5”、“6”、“7”};
阵列适配器;
//使用片段膨胀视图
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
adapter=newarrayadapter(getActivity(),R.layout.listitem,R.id.textview,options);
setListAdapter(适配器);
返回super.onCreateView(充气机、容器、savedInstanceState);
}
//点击事件
@凌驾
public void onStart(){
super.onStart();
getListView().setOnItemClickListener(新的AdapterView.OnItemClickListener()){
@凌驾
公共位置单击(适配器视图适配器视图,视图v,内部位置,长l){
开关(pos){
案例0:
Intent intent0=newintent(v.getContext(),NewActivity.class);
v、 getContext().startActivity(intent0);
打破
案例1:
打破
}
}
});
}
}

当我在listview中单击某个项目时,我已成功打开了一个活动,但我想根据在listview中单击的项目,使用一个新的片段来扩展当前活动。这不是最佳和最短的解决方案,但我发现它更容易理解。 您可以创建一个
片段
作为容器,并将其添加到您的
查看页面
。然后替换里面的碎片

fragment_container.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/fragment_container_root_view">
</LinearLayout>
在您的活动中:

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

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

}
在您的
测试片段中

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 SecondFragment()).addToBackStack("").commit();

                    break;
                case 1:

                    break;

            }

        }
    });
getListView(){
@凌驾
公共位置单击(适配器视图适配器视图,视图v,内部位置,长l){
开关(pos){
案例0:
getParentFragment().getChildFragmentManager().beginTransaction().replace(R.id.fragment_容器_根视图,新的SecondFragment()).addToBackStack(“”.commit();
打破
案例1:
打破
}
}
});

我没有测试这段代码,看它是否有错误,但是通过一些更改,您可以实现您想要的。

您想在哪里替换片段?在
ViewPager
内?是的,在
ViewPager
内,好的,等等,我在那里迷路了。我的片段容器是
activity\u test
它包含一个ViewHolder,请看上面的代码。您所指的
fragment\u container.xml
是什么?我还在
ContainerFragment.java
newtestfragment()).commit()中得到一个错误(第二个参数类型错误)。你能编辑一下你的代码,使它和我的相似吗。我的主要活动是
Test.java
我的主要活动是
activity\u Test.xml
(这是一个视图持有者)@H.Brooks Ok。。。看。。。您有一个
活动
,其中有一个
ViewPager
。您希望在
ViewPager
中显示
ListFragment
,当用户单击某个项目时,您希望替换
ViewPage
中的另一个片段。。。是这样吗?现在不要在
ViewPager
中添加
TestFragment
,而是在其中添加
ContainerFragment
,然后在
ContainerFragment
中添加
TestFragment
。现在,当用户单击任何项目时,您可以将
ContainerFragment
中的
SecondFragment
替换为
TestFragment
。确定。。我理解。。但我在尝试实现这一点时犯了一些错误。我在
ContainerFragment
--
getChildFragmentManager().beginTransaction().replace(R.id.fragment\u container\u root\u视图,new TestFragment()).commit()中收到一个错误-
错误的第二个参数类型
位于
新建TestFragment
@H.Brooks检查您的
列表视图
扩展自
支持-v4
包。
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 SecondFragment()).addToBackStack("").commit();

                    break;
                case 1:

                    break;

            }

        }
    });