自定义AsyncTaskLoader

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值