zoukankan      html  css  js  c++  java
  • fragment、ListFragment使用ListView及自定义Listview等初始化操作

    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>
  • 相关阅读:
    jQuery
    jquery获得内容
    获得链接中 href 属性的值
    遍历及过滤 first(), last() 和 eq() filter() 和 not()
    siblings() next() nextAll() nextUntil() prev() prevAll() prevUntil() 在 DOM 树中水平遍历
    后代children() find()的区别
    parent() parents() parentsUntil()三者之间的对比
    拿到类名为two_data的里面自定义属性为data的值为14的话,就给这行代码在添加一个class等于active的类
    动态给某一个元素添加active
    Jquery中拿到相同的对应的所有的标签
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4764190.html
Copyright © 2011-2022 走看看