Android开发笔记(13)——ListFragment
阅读原文时间:2023年07月15日阅读:1

转载请注明:http://www.cnblogs.com/igoslly/p/6959108.html

ListFragment

ListFragment是继承于Fragment的类,专门用于包含ListView的布局文件设置。

当然如果你不想了解ListFragment,通过使用普通Fragment进行setAdapter设置亦是可以的,普通ListView设置参见前章:http://www.cnblogs.com/igoslly/p/6947225.html

配置ListFragment通常涉及3个Layout文件:

1、包含Fragment的主Activity Layout:activity_main.xml  (可直接静态添加fragment,或设置framelayout动态添加)

2、应用ListFragment的 Layout:history_list.xml

ListFragment的布局默认包含一个listVew,命名为:“@id/android:id” (和普通命名语法不同)

还可另设 TextView 用于无数据时显示,命名为:“@id/android:empty”

3、布局中ListView每个item的设置Layout:history_list_competition.xml

以下我实际应用所写的实例,使用的是动态添加fragment,自定义BaseAdapter的方法。

—— ArrayAdapter & SimpleAdapter的设置更为简单,可参考前章

—— 静态添加fragment的方法,即是一个函数findViewById 和 findViewByTag的区别,也可详见苏白的专栏:http://blog.csdn.net/kakaxi1o1/article/details/29368645

activity_main.xml


historyFragment.java

在 onCreateView()中,调用 history_list.xml 作为该ListFragment的布局文件。

fragmentTranscation.replace(R.id.history_list, historyListFragment).commit();

动态添加historyListFragment,并替换原有fragment

public class HistoryFragment extends Fragment {
private FragmentManager fragmentManager;

public HistoryFragment() {  
}

@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                         Bundle savedInstanceState) {  
    View rootView = inflater.inflate(R.layout.history\_list, container, false);  
    return rootView;  
}

@Override  
public void onActivityCreated(Bundle savedInstanceState) {  
    super.onActivityCreated(savedInstanceState);  
    Button competition\_selected = (Button) getActivity().findViewById(R.id.history\_competition);  
    competition\_selected.setOnClickListener(new View.OnClickListener() {  
        @Override  
        public void onClick(View v) {  
            fragmentManager = getFragmentManager();  
            fragmentTranscation = fragmentManager.beginTransaction();  
            HistoryListFragment historyListFragment = new HistoryListFragment();  
            fragmentTranscation.replace(R.id.history\_list, historyListFragment).commit();  
        }}  
    );  
}  

}

history_list.xml


<TextView android:id="@id/android:empty"  
    android:layout\_width="match\_parent"  
    android:layout\_height="match\_parent"  
    android:text=""/>  

history_list_competition.xml

设置ListView的每个item的布局格式





HistoryListFragment.java

在 onCreate()中,通过setListAdapter() 设置R.layout.history_list_competition。或者使用系统的默认的R.layout.simple_list_item_1;

添加ListView的点击事件自定义BaseAdapter

注意! 如需使用本Java代码,请另行添加具体List>值,否则会报错。

public class HistoryListFragment extends ListFragment {

private CompetitionListAdapter adapter;  
private List<Map<String,Object>> competitionlist;

// 构造函数  
public HistoryListFragment(){}  
@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    competitionlist = new ArrayList<Map<String,Object>>();  
    adapter = new CompetitionListAdapter(getActivity());  
    //绑定适配器时,必须通过ListFragment.setListAdapter()接口,而不是ListView.setAdapter()或其它方法  
    this.setListAdapter(adapter);  
}

// 创建窗口  
@Override  
public View onCreateView(LayoutInflater inflater, ViewGroup container,  
                         Bundle savedInstanceState) {  
    return inflater.inflate(R.layout.history\_list, container, false);  
}

// 设置点击事件  
@Override  
public void onListItemClick(ListView l, View v, int position, long id) {  
    super.onListItemClick(l, v, position, id);

    HashMap<String, Object> item =(HashMap<String, Object>) adapter.getItem(position);  
    String scoreA = (String)item.get("scoreA");  
    String scoreB= (String)item.get("scoreB");  
    String log = (String)item.get("log");  
}

// 自定义 CompetitionListAdapter 继承于BaseAdapter  
public class CompetitionListAdapter extends BaseAdapter {  
    private LayoutInflater mInflater=null;  
    public CompetitionListAdapter(Context context){  
        this.mInflater=LayoutInflater.from(context);  
    }  
    @Override  
    public int getCount(){  
        return  competitionlist.size();  
    }  
    @Override  
    public Object getItem(int position){  
        return competitionlist.get(position);  
    }  
    @Override  
    public long getItemId(int position){  
        return position;  
    }  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent){  
        ViewHolder holder = null;  
        if (convertView ==null){  
            holder = new ViewHolder();  
            convertView = mInflater.inflate(R.layout.history\_list\_competition,null);  
            holder.date=(TextView)convertView.findViewById(R.id.list\_competition\_date);  
            holder.scoreA=(TextView)convertView.findViewById(R.id.list\_competition\_scoreA);  
            holder.scoreB=(TextView) convertView.findViewById(R.id.list\_competition\_scoreB);  
            holder.player=(TextView)convertView.findViewById(R.id.list\_competition\_player);  
            convertView.setTag(holder);  
        }else {  
            holder = (ViewHolder)convertView.getTag();  
        }  
        holder.date.setText((String)competitionlist.get(position).get("date"));  
        holder.scoreA.setText((String)competitionlist.get(position).get("scoreA"));  
        holder.scoreB.setText((String)competitionlist.get(position).get("scoreB"));  
        holder.player.setText((String)competitionlist.get(position).get("player"));  
        return convertView;  
    }

    private class ViewHolder{  
        public TextView date;  
        public TextView player;  
        public TextView scoreB;  
        public TextView scoreA;  
    }  
}  

}

总体效果图如下:

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器