自定义AsyncTaskLoader
来源:互联网 发布:广告图片制作软件 编辑:程序博客网 时间:2024/05/22 14:42
package com.demo.zlm.loderdemo;import android.app.LoaderManager;import android.content.AsyncTaskLoader;import android.content.Context;import android.content.Loader;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;public class Main2Activity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<ArrayList<Person>> { private PersonDatabaseAdapter adapter; private MyAdapter myAdapter; private MyAsyncTaskLoader loader; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); adapter=new PersonDatabaseAdapter(this); listView= (ListView) findViewById(R.id.listView); myAdapter=new MyAdapter(this,adapter.findAll()); listView.setAdapter(myAdapter); getLoaderManager().initLoader(0,null,this); } public void addClick(View v) { adapter.save(new Person("毛毛",21)); loader.onContentChanged(); } @Override public Loader<ArrayList<Person>> onCreateLoader(int id, Bundle args) { loader=new MyAsyncTaskLoader(this,adapter); return loader; } @Override public void onLoadFinished(Loader<ArrayList<Person>> loader,ArrayList<Person>data) { myAdapter.setPersons(data); myAdapter.notifyDataSetChanged(); } @Override public void onLoaderReset(Loader<ArrayList<Person>> loader) { myAdapter.setPersons(null); } public static class MyAsyncTaskLoader extends AsyncTaskLoader<ArrayList<Person>> { private PersonDatabaseAdapter adapter; private ArrayList<Person> data; public MyAsyncTaskLoader(Context context,PersonDatabaseAdapter adapter) { super(context); this.adapter=adapter; } //在后台线程中执行,加载数据 @Override public ArrayList<Person> loadInBackground() { System.out.println("loadInBackground"); data=adapter.findAll(); return data; } //用于发送结果 @Override public void deliverResult(ArrayList<Person> data) { if(isReset()) { System.out.println("这是重新加载"); return;//如果是重新加载 就直接return出去 } if(isStarted()) { System.out.println("这是启动"); super.deliverResult(data);//如果是 启动 就把结果 发送出去 } } @Override protected void onStartLoading() { if(data!=null) { System.out.println("判断数据是否为null"); deliverResult(data);//如果数据不为空 就调用发送数据的方法 把数据发送出去 } if(takeContentChanged()) { System.out.println("数据发生了改变"); forceLoad();//如果数据发生了该表 就强制加载数据 } super.onStartLoading(); } } public static class MyAdapter extends BaseAdapter { Context context; ArrayList<Person> list; public void setPersons(ArrayList<Person> list) { this.list=list; } public MyAdapter(Context context,ArrayList<Person> list) { this.context=context; 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) { ViewHolder vh; if(convertView==null) { convertView= LayoutInflater.from(context).inflate(R.layout.listitem,null); vh=new ViewHolder(); vh.tv1_id= (TextView) convertView.findViewById(R.id.tv_1_id); vh.tv2_name= (TextView) convertView.findViewById(R.id.tv2_name); vh.tv3_age= (TextView) convertView.findViewById(R.id.tv3_age); convertView.setTag(vh); } else{ vh= (ViewHolder) convertView.getTag(); } Person p=list.get(position); vh.tv1_id.setText(String.valueOf(p.getId())); vh.tv2_name.setText(p.getName()); vh.tv3_age.setText(String.valueOf(p.getAge())); return convertView; } public static class ViewHolder { TextView tv1_id; TextView tv2_name; TextView tv3_age; } }}
1 0
- 自定义AsyncTaskLoader
- Android自定义AsyncTaskLoader
- 自定义的AsyncTaskLoader类使用指南
- Android自定义AsyncTaskLoader的使用
- Loader之自定义AsyncTaskLoader<D>
- AsyncTaskLoader
- AsyncTaskLoader
- AsyncTaskLoader1 自定义AsyncTaskLoader使用实例:面包师
- AsyncTaskLoader介绍
- ContentProvider+AsyncTaskLoader
- AsyncTaskLoader vs AsyncTask
- AsyncTaskLoader 小实例
- 使用AsyncTaskLoader加载数据
- Android学习-AsyncTaskLoader学习
- AsyncTaskLoader的基本用法
- Loader,AsyncTaskLoader,CursorLoader,LoaderManager 相关
- Loader,AsyncTaskLoader,CursorLoader与LoaderManager
- Loader之AsyncTaskLoader(联系人短信)
- SPOJ Use of Function Arctan
- 修改Sublime Text 3 的侧边栏字体大小,字体类型
- Android实现类淘宝多图评价
- segmentControl实现控制器的切换
- 2016年元月份腾讯测试开发补录面试总结
- 自定义AsyncTaskLoader
- UESTC 1063 秋实大哥与妹纸 二叉堆(大根树)
- Android开发之发送自定义广播
- DB2 基础系列文章
- 杭电1161Eddy's mistakes
- servlet处理客户请求,MVC设计模式
- 定位权限是否开启
- NSUserDefaults
- poj 3614 Sunscreen 贪心