实施行动起来吧制表符碎片制表符、来吧、碎片、行动

2023-09-12 01:47:52 作者:浅蓝色初夏

所以,最近我需要执行的操作栏选项卡,将换出当前片段用一个新片段。尽管密集搜索的时间我无法找到一个明确的解决方案,所以我想我会present我怎么在这里解决了这个问题。包含两个列表视图中的片段,这竟然是一个重大的复杂因素。

So recently I needed to implement action bar tabs that would swap out the current fragment with a new fragment. Despite hours of intensive searching I was unable to find a clear solution, so I thought I would present how I solved the problem here. Two of the fragments contained list views, which turned out to be a major complicating factor.

推荐答案

首先创建活动为要附加的片段。在该活动的XML文件中添加一个线性布局,像这​​样:

First create an Activity to which you want to attach the fragments. In the XML file for that Activity add a linear layout like so:

<LinearLayout 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"
android:orientation="vertical"
tools:context=".WoodenSideProject" >
<LinearLayout
    android:id="@+id/fragment_placeholder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>   

不要别的XML文件添加。甚至没有标签主机是ploaded与Eclipse $ P $。

Do not add anything else to the XML file. Not even the tab host that is preloaded with Eclipse.

接下来创建片段。首先打造你想要的使用片段的XML文件中的用户界面为你的片段。我将展示如何创建一个列表视图片段:

Next create your fragments. First build the UI for your fragment how you want it using the fragment's XML file. I will show how to create a fragment with a List View:

public class Fragment1Name extends Fragment
{
public static String TAG="DirectionsFragment";
private String[] list_items = {"Put the list of Strings you want here"};
ListView lView1;
/*@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, list_items);
        setListAdapter(adapter);
}*/

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_XML_title, container, false);
    createListView(view);
    // Inflate the layout for this fragment
    return view;
}

private void createListView(View view)
{
    lView1 = (ListView) view.findViewById(R.id.ListViewID);
    //Set option as Multiple Choice. So that user can able to select more the one option from list
    lView1.setAdapter(new ArrayAdapter<String>(getActivity(),
    android.R.layout.simple_list_item_1, list_items));
}
}

有人建议延长ListFragment为使用列表视图的片段。我的经验是更多的麻烦比它的价值。

Some people suggest extending ListFragment for a fragment that uses a List View. My experience has been that is more trouble than it's worth.

设置活动的Java文件,如下所示:

Set up the Activity's java file as follows:

public class ActivityName extends FragmentActivity {
public static Context appContext;

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

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
setTitle("WoodenSideProject");

ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1");
ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2");
ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3");

Fragment Fragment1Name = new Fragment1Name();
Fragment Fragment2Name = new Fragment2Name();
Fragment Fragment3Name = new Fragment3Name();

tab1.setTabListener(new MyTabsListener(Fragment1Name));
tab2.setTabListener(new MyTabsListener(Fragment2Name));
tab3.setTabListener(new MyTabsListener(Fragment3Name));

actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
}

在同一个活动创建以下类:

Within the same Activity create the following class:

class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;

public MyTabsListener(Fragment fragment) {
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    //do what you want when tab is reselected, I do nothing
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.fragment_placeholder, fragment);
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    ft.remove(fragment);
}
}

我不知道其他人有尽可能多的麻烦,因为我实现操作栏与标签碎片,但如果是我希望这有助于。为更好地实现任何建议,将不胜AP preciated。

I don't know if others have had as much trouble as I implementing action bar tabs with fragments, but if they are I hope this helps. Any suggestions for better implementations would be greatly appreciated.