自定义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
原创粉丝点击