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; } } }
自定义AsyncTaskLoader
最新推荐文章于 2019-08-13 10:59:57 发布