zoukankan      html  css  js  c++  java
  • 17 ContentProvider

    • 1 Loader 转载器 Android3.0以后出来的 它可以使Activity和Fragment 异步加载数据 变得简单(Loader里封装了AsyncTask)
    • 2 Loader特点:

      1. 对每一个Activity或者Fragment有效
      2. 提供异步加载数据的机制
      3. 监测数据源的变化 ,并对变化返回新的结果
      4. 由于配置发生改变 重新创建Loader时 他会自动链接上一个加载器游标,不会重新查询数据
    • 3 使用:
      1,初始化Loader initLoader(编号,查询条件,回调接口);
      2,实现回调接口 实现三个方法
      3,在三个方法里做相应的动作

    • 代码例子:

      package com.qf.day18_loader_demo1;
      
      import android.app.Activity;
      import android.app.LoaderManager.LoaderCallbacks;
      import android.content.ContentResolver;
      import android.content.CursorLoader;
      import android.content.Loader;
      import android.database.Cursor;
      import android.net.Uri;
      import android.os.Bundle;
      import android.provider.ContactsContract;
      import android.text.Editable;
      import android.text.TextWatcher;
      import android.widget.EditText;
      import android.widget.ListView;
      import android.widget.SimpleCursorAdapter;
      
      public class MainActivity extends Activity implements LoaderCallbacks<Cursor> {
      
          private EditText etContent;
          private ListView lv;
      
          // 查找数据
          private ContentResolver contentResolver;
      
          private SimpleCursorAdapter adapter;
      
          private Uri contactsUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              etContent = (EditText) findViewById(R.id.et_content);
              lv = (ListView) findViewById(R.id.lv);
      
              etContent.addTextChangedListener(new TextWatcher() {
      
                  @Override
                  public void onTextChanged(CharSequence s, int start, int before, int count) {
                      // TODO Auto-generated method stub
      
                  }
      
                  @Override
                  public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                      // TODO Auto-generated method stub
      
                  }
      
                  @Override
                  public void afterTextChanged(Editable s) {
                      // TODO Auto-generated method stub
                      // 文本发生改变
                      Bundle bundle = new Bundle();
                      bundle.putString("key", s.toString());
                      // 当加载数据的条件发生改变时 重启loader
                      getLoaderManager().restartLoader(1, bundle, MainActivity.this);
                  }
              });
      
              adapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, null,
                      new String[] { "display_name", "data1" }, new int[] { R.id.tv_name, R.id.tv_data },
                      SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
      
              lv.setAdapter(adapter);
      
              /**
               * 获取当前组件Activity 的Loader对象 获取Loader管理者对象 用对象进行初始化
               * 
               */
              getLoaderManager().initLoader(1, null, this);
      
          }
      
          /**
           * 创建Loader 用于加载数据
           * 
           * @param id
           * @param args
           * @return
           */
          @Override
          public Loader<Cursor> onCreateLoader(int id, Bundle args) {
              // TODO Auto-generated method stub
              String selection = null;
              String[] selectionArgs = null;
      
              // 有传递过来的数据
              if (args != null) {
      
                  String key = args.getString("key");
                  selection = "display_name like ? or data1 like ?";
                  selectionArgs = new String[] { "%" + key + "%", "%" + key + "%" };
              }
      
              CursorLoader cursorLoader = new CursorLoader(MainActivity.this, contactsUri,
                      new String[] { "_id", "display_name", "data1" }, selection, selectionArgs, null);
              return cursorLoader;
          }
      
          /**
           * Loader加载数据完成 调用此方法
           * 
           * @param arg0
           * @param arg1
           */
          @Override
          public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
              // TODO Auto-generated method stub
              // 将数据展示到ListView上
              adapter.swapCursor(arg1);
          }
      
          /**
           * 重置时 调用此方法
           * 
           * @param arg0
           */
          @Override
          public void onLoaderReset(Loader<Cursor> arg0) {
              // TODO Auto-generated method stub
              // 清除旧的数据
              adapter.swapCursor(null);
          }
      
      }
      

      这里写图片描述

  • 相关阅读:
    软件设计7个原则
    vue.js 样式绑定 font-size 问题
    实例理解scala 隐式转换(隐式值,隐式方法,隐式类)
    著名端口整理(常用服务的默认端总结)
    .NET Core Web API 实现大文件分片上传
    ngnix反向代理tomcat,ssl证书配置及自定义错误页面
    微信登录闪退
    gradle如何配置阿里云的中央仓库
    HashMap底层实现和原理
    关于Java中String类的hashCode方法
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152239.html
Copyright © 2011-2022 走看看