现在的位置: 首页 > 综合 > 正文

Fragment学习之ListFragment及自定义适配器

2018年02月08日 ⁄ 综合 ⁄ 共 4208字 ⁄ 字号 评论关闭

Android提供的ListFragment虽然存在一些适配器,但是往往不能满足我们开发的需要,此时我们就要使用自定义的Adapter

MainActivity.java:

public class MainActivity extends FragmentActivity {

	private Button button;
	private FragmentManager manager;
	private FragmentTransaction transaction;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
		
		button = (Button) this.findViewById(R.id.button1);
		
		manager = getSupportFragmentManager();
		
		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				transaction = manager.beginTransaction();
				
				ArticleListFragment fragment = new ArticleListFragment();
				
				transaction.add(R.id.right, fragment, "fragment");
				
				transaction.commit();
			}
		});
	}

}

ArticleListFragment.java代码如下:

public class ArticleListFragment extends ListFragment {

	/* 定义适配器 */
	private MyAdapter adapter;

	public ArticleListFragment() {
		// TODO Auto-generated constructor stub
	}

	/* 创建数据源 */
	public List<String> getData() {
		
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < 20; i++) {
			list.add("廖泽民" + i);
		}
		
		return list;
	}

	/* 这个方法适合初始化数据 */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		/*创建adapter*/
		adapter = new MyAdapter();
		/*为adapter绑定数据*/
		adapter.bindData(getData());
	}

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

		/* 动态加载布局 */
		View view = inflater.inflate(R.layout.article, null);

		/**
		 * 设置适配器。 注意:为什么不在onCreate方法中设置适配器,是因为我们使用了自定义的视图,也就是 说我们要加载完自定义的视图以后才可以设置适配器,如果在onCreate方法中就设置的话, 必然会出错
		 */
		this.setListAdapter(adapter);

		return view;
	}

	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
	}

	/**
	 * ListFragment提供了一个方便的方法onListItemClick
	 */
	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);

		String item = adapter.getItem(position).toString();
		/* 打印 */
		Toast.makeText(getActivity(), "-->>" + item, 1).show();
	}

	/**
	 * 自定义适配器
	 * 
	 * @author Liao
	 * 
	 */
	class MyAdapter extends BaseAdapter {

		/* 数据集合 */
		private List<String> list;

		/**
		 * 绑定数据
		 * 
		 * @param list
		 */
		public void bindData(List<String> list) {
			this.list = list;
		}

		@Override
		public int getCount() {

			return list.size();
		}

		@Override
		public Object getItem(int position) {

			return list.get(position);
		}

		@Override
		public long getItemId(int position) {

			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {

			View view = null;
			if (convertView == null) {
				view = LayoutInflater.from(getActivity()).inflate(R.layout.item, null);

			} else {
				view = convertView;
			}

			/* 从动态布局中获取控件 */
			TextView textView = (TextView) view.findViewById(R.id.textView1);
			/* 设置TextView的值 */
			textView.setText(list.get(position).toString());

			return view;
		}
	}
}

activity_main.xml代码:

<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="horizontal"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/left"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="show" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/right"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:background="#CCCCCC"
        android:orientation="vertical" >
    </LinearLayout>

</LinearLayout>

article.xml【注:android API规定使用ListFragment时定义的ListView的id必须为android:id="@id/android:list"】

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="8dp"
    android:paddingRight="8dp" >

    <ListView
        android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#00FF00"
        android:drawSelectorOnTop="false" />

</LinearLayout>

item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
         />

</LinearLayout>

demo结果展示:

抱歉!评论已关闭.