使用ListView的Fragment



1.使用ListFragment可实现包含Listiew的Fragment


2.在Fragment的布局中必须包含id"@android:id/list"(在代码中则是list)的Listview


3.只能使用SimpleAdapter或者SimpleCursorAdapter作为适配器


4.直接使用ListFragment的setListAdapter()来设置适配器【不要给ListView设置】


5.ListView点击事件的监听,重写ListFragment的onListItemClick(ListView l, View v, int position, long id)方法



1)新建ListFragment的布局fragment1.xml


Xml代码   收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>

  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

  3. android:layout_width="match_parent"

  4. android:layout_height="match_parent"

  5. android:orientation="vertical">

  6. <TextView

  7. android:layout_width="fill_parent"

  8. android:layout_height="wrap_content"

  9. android:gravity="center"

  10. android:text="Titles"

  11. />

  12. <ListView

  13. android:id="@id/android:list"

  14. android:layout_width="fill_parent"

  15. android:layout_height="wrap_content"

  16. ></ListView>

  17. </LinearLayout>



2)新建Fragment继承自ListFragment,命名为Fragment1。


Java代码   收藏代码
  1. import java.util.ArrayList;  

  2. import java.util.HashMap;  

  3. import java.util.List;  

  4. import java.util.Map;  

  5. import android.app.Activity;  

  6. import android.os.Bundle;  

  7. import android.support.v4.app.ListFragment;  

  8. import android.util.Log;  

  9. import android.view.LayoutInflater;  

  10. import android.view.View;  

  11. import android.view.ViewGroup;  

  12. import android.widget.ListView;  

  13. import android.widget.SimpleAdapter;  

  14. import android.widget.TextView;  

  15. import android.widget.Toast;  

  16. /**

  17. * @描述 在Fragment中要使用ListView,就要用ListFragment

  18. * */

  19. publicclass Fragment1 extends ListFragment   {  

  20. private String TAG = Fragment1.class.getName();  

  21. private ListView list ;  

  22. private SimpleAdapter adapter;  

  23. /**

  24.     * @描述 在onCreateView中加载布局

  25.     * */

  26. @Override

  27. public View onCreateView(LayoutInflater inflater, ViewGroup container,  

  28.            Bundle savedInstanceState) {  

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

  30.        list = (ListView) view.findViewById(android.R.id.list);  

  31.        Log.i(TAG, "--------onCreateView");  

  32. return view;  

  33.    }  

  34. @Override

  35. publicvoid onCreate(Bundle savedInstanceState) {  

  36. super.onCreate(savedInstanceState);  

  37.        b = savedInstanceState;  

  38.        Log.i(TAG, "--------onCreate");  

  39.        String[] list = {"Class 1","Class 2","class 3","Class 4","Class 5"};  

  40.        adapter = new SimpleAdapter(getActivity(), getData(list), R.layout.item_list, new String[]{"title"}, newint[]{R.id.title});  

  41.        setListAdapter(adapter);  

  42.    }  

  43. @Override

  44. publicvoid onListItemClick(ListView l, View v, int position, long id) {  

  45. super.onListItemClick(l, v, position, id);  

  46.        System.out.println(l.getChildAt(position));  

  47.        HashMap<String, Object> view= (HashMap<String, Object>) l.getItemAtPosition(position);  

  48.        System.out.println(view.get("title").toString()+"+++++++++title");  

  49.        Toast.makeText(getActivity(), TAG+l.getItemIdAtPosition(position), Toast.LENGTH_LONG).show();  

  50.        System.out.println(v);  

  51.        System.out.println(position);  

  52.    }  

  53. private List<? extends Map<String, ?>> getData(String[] strs) {  

  54.        List<Map<String ,Object>> list = new ArrayList<Map<String,Object>>();  

  55. for (int i = 0; i < strs.length; i++) {  

  56.            Map<String, Object> map = new HashMap<String, Object>();  

  57.            map.put("title", strs[i]);  

  58.            list.add(map);  

  59.        }  

  60. return list;  

  61.    }  

  62. @Override

  63. publicvoid onActivityCreated(Bundle savedInstanceState) {  

  64. super.onActivityCreated(savedInstanceState);  

  65.        Log.i(TAG, "--------onActivityCreated");  

  66.    }  

  67. @Override

  68. publicvoid onAttach(Activity activity) {  

  69. super.onAttach(activity);  

  70.        Log.i(TAG, "----------onAttach");  

  71.    }  

  72. }  



3)新建Activity,继承自FragmentActivity,将Fragment添加到Activity中。命名为FragmentsActivity。


Java代码   收藏代码
  1. publicclass FragmentsActivity extends FragmentActivity {  

  2. @Override

  3. protectedvoid onCreate(Bundle savedInstanceState) {  

  4. super.onCreate(savedInstanceState);  

  5.        setContentView(R.layout.activity_fragments);  

  6.        Display display = getWindowManager().getDefaultDisplay();  

  7.        Fragment1 f1 = new Fragment1();  

  8.        FragmentManager manager  = getSupportFragmentManager();  

  9.        manager.beginTransaction().add(R.id.fragments, f1).commit();  

  10.    }  

  11. @Override

  12. publicboolean onCreateOptionsMenu(Menu menu) {  

  13. // Inflate the menu; this adds items to the action bar if it is present.

  14.        getMenuInflater().inflate(R.menu.fragments, menu);  

  15. returntrue;  

  16.    }  

  17. }  



效果图:


9cacfd37-cbe9-3bbf-bf86-51f3fdfb3cf8.png