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版本同样适用

父类封装:

 

  1. public class BaseListFragment extends ListFragment {
  2.     public Map<String, String> map;
  3.     public String tag = this.getClass().getSimpleName(); // tag 用于测试log用
  4.     public Context context; // 存储上下文对象
  5.     public Activity activity; // 存储上下文对象
  6.     @Override
  7.     public void onCreate(Bundle savedInstanceState) {
  8.         super.onCreate(savedInstanceState);
  9.         context = getActivity();
  10.         activity = getActivity();
  11.     }
  12. }

子类实现:

 

 

  1. /**
  2.  * 新闻分类页面
  3.  * @author chen
  4.  * @date 2012-12-18 下午5:48:02
  5.  */
  6. public class NewsFragment extends BaseListFragment {
  7.     /** 请求url */
  8.     private String url;
  9.     /** ListView */
  10.     private PullListView mListView;
  11. //  /** 分页 */
  12. //  private Page page = new Page();
  13.     /** 商铺适配器 */
  14.     private Adapter mAdapter = new Adapter(activity);;
  15.     /** 集合数据 */
  16.     public ArrayList<News> mListData;
  17.     /** 是否重新加载 */
  18.     private boolean isClear;
  19.     private LayoutInflater mInflater;
  20.     /** 新闻详细页面 url */
  21.     private String detailUrl = C.http.http_news_detail;
  22.     public NewsFragment(){}
  23.     public NewsFragment(Context context, String url) {
  24.         this.context = context;
  25.         this.url = url;
  26.         mListData = null;
  27.     }
  28.     @Override
  29.     public void onCreate(Bundle savedInstanceState) {
  30.         super.onCreate(savedInstanceState);
  31.         Log.i(tag, ”onCreate”);
  32.     }
  33.     // 加载多次
  34.     public void onActivityCreated(Bundle savedInstanceState) {
  35.         super.onActivityCreated(savedInstanceState);
  36.         Log.i(tag, ”onActivityCreated”);
  37.         mListView = (PullListView) getListView();//(ListView) activity.findViewById(android.R.id.list);
  38.         if(mListData != null && mListData.size() > 0) {
  39.             return;
  40.         }
  41.         mListData = new ArrayList<News>();
  42.         setListAdapter(mAdapter);
  43.         mListView.onRefreshComplete();
  44.         mListView.setonRefreshListener(new OnRefreshListener() {
  45.             public void onRefresh() {
  46.                 isClear = true;
  47.                 // 初始化数据
  48.                 AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news, url, true, true, true);
  49.             }
  50.         });
  51.         // 初始化数据
  52.         AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news, url, true, true, false);
  53.     }
  54.     // 加载多次
  55.     @Override
  56.     public View onCreateView(LayoutInflater inflater, ViewGroup container,
  57.             Bundle savedInstanceState) {
  58.         super.onCreateView(inflater, container, savedInstanceState);
  59.         View view = inflater.inflate(R.layout.fragment_news_or_hotline, container, false);
  60.         mInflater = inflater;
  61.         Log.i(tag, ”onCreateView”);
  62.         return view;
  63.     }
  64.     @Override
  65.     public void onStart() {
  66.         Log.i(tag, ”onStart”);
  67.         super.onStart();
  68.     }
  69.     @Override
  70.     public void onStop() {
  71.         super.onStop();
  72.         Log.i(tag, ”onStop”);
  73.     }
  74.     @Override
  75.     public void onDestroy() {
  76.         super.onDestroy();
  77.         Log.i(tag, ”onDestroy”);
  78.     }
  79.     /**
  80.      * 异步回调回来并处理数据
  81.      */
  82.     private ObserverCallBack callbackData = new ObserverCallBack(){
  83.         public void back(String data, int url) {
  84.             Message msg = new Message();
  85.             switch (url) {
  86.             case R.string.http_news: // 解析主题信息数据
  87.                 msg = new Message();
  88.                 if(data == null) {
  89.                     msg.what = 2;
  90.                     mHandler.sendMessage(msg);
  91.                     return;
  92.                 }
  93.                 try {
  94.                     News news = new News();
  95.                     ArrayList<News> dataInfo = news.getListInfo(data);
  96.                     if(isClear) {
  97.                         if(dataInfo != null && dataInfo.size()>0) mListData.clear();
  98.                         isClear = false;
  99.                     }
  100.                     if(mListData != null && mListData.size() > 0)
  101.                         msg.what = 1;
  102.                     else
  103.                         msg.what = 0;
  104.                     if(dataInfo == null || dataInfo.size() == 0){
  105.                         if( mListData != null && mListData.size() > 0){
  106.                             msg = new Message();
  107.                             msg.what = 2;
  108.                             mHandler.sendMessage(msg);
  109.                             return;
  110.                         }
  111.                     } else {
  112.                         mListData.addAll(dataInfo);
  113.                     }
  114.                     mHandler.sendMessage(msg);
  115.                 } catch (Exception e) {
  116.                     e.printStackTrace();
  117.                 }
  118.                 break;
  119.             case R.string.http_news_detail:
  120.                 msg = new Message();
  121.                 if(data == null) {
  122.                     msg.what = 2;
  123.                     mHandler.sendMessage(msg);
  124.                     return;
  125.                 }
  126.                 try {
  127.                     NewsDetail newsDetail = new NewsDetail();
  128.                     newsDetail = newsDetail.getInfo(data, detailUrl);
  129.                     msg.what = 3;
  130.                     msg.obj = newsDetail;
  131.                     if(newsDetail.content == null || newsDetail.content.length() == 0){
  132.                         msg = new Message();
  133.                         msg.what = 2;
  134.                         mHandler.sendMessage(msg);
  135.                         return;
  136.                     }
  137.                     mHandler.sendMessage(msg);
  138.                 } catch (Exception e) {
  139.                     msg = new Message();
  140.                     msg.what = 2;
  141.                     mHandler.sendMessage(msg);
  142.                 }
  143.                 break;
  144.             default:
  145.                 break;
  146.             }
  147.         };
  148.     };
  149.     private Handler mHandler = new Handler(){
  150.         @Override
  151.         public void handleMessage(Message msg) {
  152.             super.handleMessage(msg);
  153.             switch (msg.what) {
  154.             case 0:
  155.                 mAdapter.notifyDataSetChanged();
  156.                 mListView.onRefreshComplete();
  157. //              if(mListData.size() == 0){
  158. ////                    Toast.makeText(context, R.string.dialog_title_nowData, Toast.LENGTH_LONG).show();
  159. //                    mListView.setVisibility(View.GONE);
  160. //              } else mListView.setVisibility(View.VISIBLE);
  161.                 break;
  162.             case 1:
  163.                 mAdapter.notifyDataSetChanged();
  164. //              if(mListData.size() == 0){
  165. ////                    Toast.makeText(context, R.string.dialog_title_nowData, Toast.LENGTH_LONG).show();
  166. //                    mListView.setVisibility(View.GONE);
  167. //              }else mListView.setVisibility(View.VISIBLE);
  168.                 break;
  169.             case 2:
  170.                 Toast.makeText(context, R.string.no_data, Toast.LENGTH_LONG).show();
  171.                 break;
  172.             case 3:
  173.                 NewsDetail newsDetail = (NewsDetail) msg.obj;
  174.                 Intent intent = new Intent(context, NewsDetailActivity.class);
  175.                 intent.putExtra(“content”, newsDetail.content);
  176.                 intent.putExtra(“hostUrl”, newsDetail.hostUrl);
  177.                 startActivity(intent);
  178.                 break;
  179.             default:
  180.                 break;
  181.             }
  182.         }
  183.     };
  184.     public final class ViewHolder {
  185.         public TextView title;
  186.         public TextView time;
  187.     }
  188.     // 添加列表内容
  189.     public class Adapter extends BaseAdapter {
  190.         public Adapter(){}
  191.         @Override
  192.         public boolean areAllItemsEnabled() {
  193.             return super.areAllItemsEnabled();
  194.         }
  195.         public Adapter(Context context) {
  196.         }
  197.         @Override
  198.         public int getCount() {
  199.             return mListData.size();
  200.         }
  201.         @Override
  202.         public Object getItem(int position) {
  203.             return null;
  204.         }
  205.         @Override
  206.         public long getItemId(int position) {
  207.             return position;
  208.         }
  209.         @Override
  210.         public View getView(final int position, View convertView,
  211.                 ViewGroup parent) {
  212.             final News news = mListData.get(position);
  213.             ViewHolder holder = null;
  214.             if (convertView == null) {
  215.                 holder = new ViewHolder();
  216.                 convertView = mInflater.inflate(R.layout.list_item_mian, null);
  217.                 holder.title = (TextView) convertView.findViewById(R.id.list_main_txt_title);
  218.                 holder.time = (TextView) convertView.findViewById(R.id.list_main_txt_time);
  219.                 convertView.setTag(holder);
  220.             } else {
  221.                 holder = (ViewHolder) convertView.getTag();
  222.             }
  223.             // 进行数据设置
  224.             holder.title.setText(news.title);
  225.             holder.time.setText(news.time);
  226.             convertView.setOnClickListener(new OnClickListener() {
  227.                 @Override
  228.                 public void onClick(View v) { // 加载详细新闻
  229.                     detailUrl = mListData.get(position).childUrl;
  230.                     AnsynHttpRequest.requestByGet(context, callbackData, R.string.http_news_detail, detailUrl, true, true, false);
  231.                 }
  232.             });
  233.             return convertView;
  234.         }
  235.     }
  236. }