Java Android-来自ArrayAdapter的片段
目前,我有一个活动,其中有一个viewpager,它会膨胀一个listfragment。 当用户点击listview中的一个项目时,我想膨胀一个新的片段 Test.javaJava 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);
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.javanewtestfragment()).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;
}
}
});