【问题标题】:how to create a list view using action bar tabs with fragment?如何使用带有片段的操作栏选项卡创建列表视图?
【发布时间】:2013-10-23 10:58:14
【问题描述】:

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

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

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

        }

    }
}

在我将扩展 Fragment 的 MyfragmentA 更改为扩展 Activity 后,tabA 出现问题

我的片段A

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>

【问题讨论】:

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


    【解决方案1】:

    你应该扩展 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();
    
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多