fragment、ListFragment使用ListView及自定义Listview等初始化操作

1.先说一下 从官方api中说fragment碎片中使用Listview有专门的 ListView碎片-> ListFragment 而不能继承Fragment

官方api相关连接:http://developer.android.com/guide/components/fragments.html

2.不废话直接上代码,这是我项目种的代码 2.1版本同样适用

父类封装:

public class BaseListFragment extends ListFragment {
    public Map<String, String> map;
    public String tag = this.getClass().getSimpleName(); // tag 用于测试log用
    public Context context; // 存储上下文对象
    public Activity activity; // 存储上下文对象

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = getActivity();
        activity = getActivity();
    }
}

子类实现:

/**
 * 新闻分类页面
 * @author chen
 * @date 2012-12-18 下午5:48:02
 */
public class NewsFragment extends BaseListFragment {
    /** 请求url */
    private String url;
    /** ListView */
    private PullListView mListView;
//    /** 分页 */
//    private Page page = new Page();
    /** 商铺适配器 */
    private Adapter mAdapter = new Adapter(activity);;
    /** 集合数据 */
    public ArrayList<News> mListData;
    /** 是否重新加载 */
    private boolean isClear;

    private LayoutInflater mInflater;
    /** 新闻详细页面 url */
    private String detailUrl = C.http.http_news_detail;

    public NewsFragment(){}
    public NewsFragment(Context context, String url) {
        this.context = context;
        this.url = url;
        mListData = null;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(tag, "onCreate");
    }

    // 加载多次
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i(tag, "onActivityCreated");
        mListView = (PullListView) getListView();//(ListView) activity.findViewById(android.R.id.list);
        if(mListData != null && mListData.size() > 0) {
            return;
        }

        mListData = new ArrayList<News>();
        setListAdapter(mAdapter);
        mListView.onRefreshComplete();
        mListView.setonRefreshListener(new OnRefreshListener() {
            public void onRefresh() {
                isClear = true;
                // 初始化数据
                AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news, url, true, true, true);
            }
        });
        // 初始化数据
        AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news, url, true, true, false);
    }

    // 加载多次
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.fragment_news_or_hotline, container, false);
        mInflater = inflater;
        Log.i(tag, "onCreateView");
        return view;
    }
    @Override
    public void onStart() {
        Log.i(tag, "onStart");
        super.onStart();
    }
    @Override
    public void onStop() {
        super.onStop();
        Log.i(tag, "onStop");
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(tag, "onDestroy");
    }

    /**
     * 异步回调回来并处理数据
     */
    private ObserverCallBack callbackData = new ObserverCallBack(){
        public void back(String data, int url) {
            Message msg = new Message();
            switch (url) {
            case R.string.http_news: // 解析主题信息数据
                msg = new Message();
                if(data == null) {
                    msg.what = 2;
                    mHandler.sendMessage(msg);
                    return;
                }
                try {
                    News news = new News();
                    ArrayList<News> dataInfo = news.getListInfo(data);
                    if(isClear) {
                        if(dataInfo != null && dataInfo.size()>0) mListData.clear();
                        isClear = false;
                    }

                    if(mListData != null && mListData.size() > 0)
                        msg.what = 1;
                    else
                        msg.what = 0;
                    if(dataInfo == null || dataInfo.size() == 0){
                        if( mListData != null && mListData.size() > 0){
                            msg = new Message();
                            msg.what = 2;
                            mHandler.sendMessage(msg);
                            return;
                        }
                    } else {
                        mListData.addAll(dataInfo);
                    }
                    mHandler.sendMessage(msg);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                break;
            case R.string.http_news_detail:
                msg = new Message();
                if(data == null) {
                    msg.what = 2;
                    mHandler.sendMessage(msg);
                    return;
                }
                try {
                    NewsDetail newsDetail = new NewsDetail();
                    newsDetail = newsDetail.getInfo(data, detailUrl);
                    msg.what = 3;
                    msg.obj = newsDetail;
                    if(newsDetail.content == null || newsDetail.content.length() == 0){
                        msg = new Message();
                        msg.what = 2;
                        mHandler.sendMessage(msg);
                        return;
                    }
                    mHandler.sendMessage(msg);
                } catch (Exception e) {
                    msg = new Message();
                    msg.what = 2;
                    mHandler.sendMessage(msg);
                }
                break;
            default:
                break;
            }
        };
    };

    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                mAdapter.notifyDataSetChanged();
                mListView.onRefreshComplete();
//                if(mListData.size() == 0){
////                    Toast.makeText(context, R.string.dialog_title_nowData, Toast.LENGTH_LONG).show();
//                    mListView.setVisibility(View.GONE);
//                } else mListView.setVisibility(View.VISIBLE);
                break;
            case 1:
                mAdapter.notifyDataSetChanged();
//                if(mListData.size() == 0){
////                    Toast.makeText(context, R.string.dialog_title_nowData, Toast.LENGTH_LONG).show();
//                    mListView.setVisibility(View.GONE);
//                }else mListView.setVisibility(View.VISIBLE);
                break;
            case 2:
                Toast.makeText(context, R.string.no_data, Toast.LENGTH_LONG).show();
                break;
            case 3:
                NewsDetail newsDetail = (NewsDetail) msg.obj;
                Intent intent = new Intent(context, NewsDetailActivity.class);
                intent.putExtra("content", newsDetail.content);
                intent.putExtra("hostUrl", newsDetail.hostUrl);
                startActivity(intent);
                break;
            default:
                break;
            }
        }
    };

    public final class ViewHolder {
        public TextView title;
        public TextView time;
    }

    // 添加列表内容
    public class Adapter extends BaseAdapter {
        public Adapter(){}
        @Override
        public boolean areAllItemsEnabled() {
            return super.areAllItemsEnabled();
        }

        public Adapter(Context context) {
        }
        @Override
        public int getCount() {
            return mListData.size();
        }
        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            final News news = mListData.get(position);
            ViewHolder holder = null;
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = mInflater.inflate(R.layout.list_item_mian, null);
                holder.title = (TextView) convertView.findViewById(R.id.list_main_txt_title);
                holder.time = (TextView) convertView.findViewById(R.id.list_main_txt_time);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            // 进行数据设置
            holder.title.setText(news.title);
            holder.time.setText(news.time);
            convertView.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) { // 加载详细新闻
                    detailUrl = mListData.get(position).childUrl;
                    AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news_detail, detailUrl, true, true, false);
                }
            });
            return convertView;
        }
    }
}

layout 如下:里面引用的是网上找的自定义下拉上啦刷新 可自行去找

<?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" >

    <com.vv.apps.hua.app.base.view.PullListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="@color/transparent"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:fastScrollEnabled="true"
        android:focusable="true"
         />

</LinearLayout>
时间: 2024-10-24 10:28:18

fragment、ListFragment使用ListView及自定义Listview等初始化操作的相关文章

自定义ListView实现中间项动态变大的效果(不是自定义Adapter)

为什么强调不是自定义Adapter,因为我这个自定义控件是来源与公司新做的项目,刚开始在百度上找了一圈,都说是自定义ListView ,点进去却是自定义Adaper,有的人就会说你是不是太较真了,自定义Adapter就基本可以实现各种效果了,何必要自定义Listview,今天我做的这个还确实不好用Adapter做,先上效果图,右边的动图来源于左边这个项目中的一个控件. 因为我们的项目中,六个通道的检测过程要同时动态显示,这样位置就要合理调配,因为六个通道采用的布局比较相似,所以当时考虑了Frag

自定义ListView的点击Item项后进入另一个activity背景色改变在pressed或selected等状态时的颜色

在点击进入另一个activity时颜色改变是想在游戏攻略中实现的,但查资料找不到结果,今天突发灵感终于实现了. 我们大多数情况下都是自己写adapter,在写的那个Class中定义一个 boolean 型的 IsJump.然后在 OnItemClickListener 中 把 IsJump 设置为ture,再adapter2.notifyDataSetChanged();  在Adapter中 ture 的情况设置一种颜色就解决问题标记是否读过了.' 自定义ListView的Item项在pres

Android之自定义ListView(一)

PS:自定义View是Android中高手进阶的路线.因此我也打算一步一步的学习.看了鸿洋和郭霖这两位大牛的博客,决定一步一步的学习,循序渐进. 学习内容: 1.自定义View实现ListView的Item左右滑动显示和隐藏弹窗的效果   自定义View其实是在Android学习路上比较难掌握的一个重要点,但是也是高手的必经之路,自定义View分为很多种,我们可以直接继承View,或者是继承他的直接子类或间接子类.ViewGroup,ListView,LinearLayout,Button等等.

android之ListView,详细介绍实现步骤,举例,自定义listview适配器

android之ListView,详细介绍实现步骤,举例,自定义listview适配器 09. 四 / android基础 / 没有评论 本文来源于www.ifyao.com禁止转载!www.ifyao.com android中如何使用listView是比较重要的,因为很多时候都需要将数据库中的数据以列表显示, 具体使用步骤:大体 1,建立一个item.xml文件,此布局文件布局布局如何具体显示列表中的每一个条目 2,在要使用listview的界面中添加listview控件. 3,activit

自定义ListView动态加载数据

我们都知道网络取数据是耗时操作,如果我们一次性请求所有数据,假如数据量不多那还可以接受,但是如果数据量特别多,那么带来的后果就是用户的愤怒(用户是很没有耐心的),所以这时候我们就需要动态的加载数据,分批加载我们所需的数据,提升用户体验,先上图.           一般如果一个Activity集成越多的功能,代码量也会随之增多,看起来让人烦,我们可以考虑自定义控件将一些操作集成进去. 自定义ListView 1 package com.example.listviewdynamicloading

android开发最常用例子整理----(3)自定义ListView(自定义BaseAdapter实现)

在上一个教程中,我们使用SimpleAdapter实现自定义ListView,但是有一点不方便的是,如果要对每一个ListView的item选项进行不同的样式设置,就很麻烦,因为SimpleAdapter使用的是统一的风格样式.如果要实现不同item使用不同的风格样式,那么就要通过集成BaseAdapter来实现. 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override prot

无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

1.listview入门,自定义的数据适配器 <RelativeLayout 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开发(33) 自定义 listView的分割线( 使用xml drawable画多条线)

我遇到这样一个场景,我需要自定义 listView的分割线,而这个分割线是由两条线组成的,在使用xml drawable时遇到了困难. 注释:画两条线是为了实现 凹陷的效果,在绘图中一条暗线紧跟着一条明显会给人视觉上产生明显的“沟”的感觉. 因为我的背景是透明(背景渐变)的,直接用图片来实现效果不好. 看看效果: 使用 layer-list 来实现. layer-list 可以包含多个item,每个item堆叠在一起. layer-list  的item可以设置 间距,使用  android:b

Android中使用ListView绘制自定义表格(2)

上回再写了<Android中使用ListView绘制自定义表格>后,很多人留言代码不全和没有数据样例.但因为项目原因,没法把源码全部贴上来.近两天,抽空简化了一下,做了一个例子. 效果图如 一.功能: 1.支持列合并 2.考虑了界面刷新优化 3.预留部分接口 4.支持左右滚动 1.枚举类:CellTypeEnum package csdn.danielinbiti.custometableview.item; public enum CellTypeEnum { STRING //字符 ,DI