如何使用带有片段的操作栏选项卡创建列表视图?

时间:2013-10-23 10:58:14

标签: android android-listview error-handling android-actionbar fragment

我正在创建一个简单的应用程序,允许用户登录,然后显示包含三个选项卡的操作栏,每个选项卡都使用列表视图包含一个列表。

问题是我不知道如何在片段内构建列表视图可以任何人帮助我?????

AndroidNavigationTabsActivity

package com.exercise.AndroidNavigationTabs;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;

public class AndroidNavigationTabsActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        Tab tabA = actionBar.newTab();
        tabA.setText("Tab A");
        tabA.setTabListener(new TabListener<MyFragmentA>(this, "Tag A", MyFragmentA.class));
        actionBar.addTab(tabA);

        Tab tabB = actionBar.newTab();
        tabB.setText("Tab B");
        tabB.setTabListener(new TabListener<MyFragmentB>(this, "Tag B", MyFragmentB.class));
        actionBar.addTab(tabB);

        Tab tabC = actionBar.newTab();
        tabC.setText("Tab C");
        tabC.setTabListener(new TabListener<MyFragmentC>(this, "Tag C", MyFragmentC.class));
        actionBar.addTab(tabC);

        if (savedInstanceState != null) {
            int savedIndex = savedInstanceState.getInt("SAVED_INDEX");
            getActionBar().setSelectedNavigationItem(savedIndex);
        }

    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        outState.putInt("SAVED_INDEX", getActionBar().getSelectedNavigationIndex());
    }

    public static class TabListener<T extends Fragment> 
        implements ActionBar.TabListener{

        private final Activity myActivity;
        private final String myTag;
        private final Class<T> myClass;

        public TabListener(Activity activity, String tag, Class<T> cls) {
            myActivity = activity;
            myTag = tag;
            myClass = cls;
        }

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {

            Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

            // Check if the fragment is already initialized
            if (myFragment == null) {
                // If not, instantiate and add it to the activity
                myFragment = Fragment.instantiate(myActivity, myClass.getName());
                ft.add(android.R.id.content, myFragment, myTag);
            } else {
                // If it exists, simply attach it in order to show it
                ft.attach(myFragment);
            }

        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {

            Fragment myFragment = myActivity.getFragmentManager().findFragmentByTag(myTag);

            if (myFragment != null) {
                // Detach the fragment, because another one is being attached
                ft.detach(myFragment);
            }

        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub

        }

    }
}

我改变了将片段扩展为Exment活动的MyfragmentA

后,我遇到了tabA的问题

MyFragmentA

package com.exercise.AndroidNavigationTabs;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MyFragmentA extends Activity implements OnItemClickListener {

    ListView dalil_khadamet_list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_a);
        dalil_khadamet_list = (ListView) findViewById(R.id.khadamet_list);

        String[] values = new String[] { "وظائف", "عقارات", "سيارات", "تجارة",
                "ثقافة" };

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, values);

        dalil_khadamet_list.setAdapter(adapter);

        dalil_khadamet_list.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?>  parent, View view,
            int position, long id) {
        // TODO Auto-generated method stub

          // ListView Clicked item index
        int itemPosition= position;

        // ListView Clicked item value
        String  itemValue = (String) dalil_khadamet_list.getItemAtPosition(position);

         // Show Alert 
         Toast.makeText(getApplicationContext(),
           "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
           .show();


    }

    /*
     * @Override public View onCreateView(LayoutInflater inflater, ViewGroup
     * container, Bundle savedInstanceState) { View myFragmentView =
     * inflater.inflate(R.layout.fragment_a, container, false); return
     * myFragmentView; }
     */

}

fragment_a.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="It's Fragment A" />

   <ListView
       android:id="@+id/khadamet_list"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" >
   </ListView>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

你应该扩展Fragment,而不是Activity

public class MyFragmentA extends Fragment implements OnItemClickListener {

    ListView dalil_khadamet_list;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_a, container, false);

        dalil_khadamet_list = (ListView) view.findViewById(R.id.khadamet_list);

        String[] values = new String[] { "وظائف", "عقارات", "سيارات", "تجارة",
                "ثقافة" };

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, android.R.id.text1, values);

        dalil_khadamet_list.setAdapter(adapter);

        dalil_khadamet_list.setOnItemClickListener(getActivity());

        return view;
    }

    @Override
    public void onItemClick(AdapterView<?>  parent, View view,
            int position, long id) {
        // TODO Auto-generated method stub

          // ListView Clicked item index
        int itemPosition= position;

        // ListView Clicked item value
        String  itemValue = (String) dalil_khadamet_list.getItemAtPosition(position);

         // Show Alert 
         Toast.makeText(getApplicationContext(),
           "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
           .show();


    }

}