• 18 Loader代码案例


    • 目录结构:
      这里写图片描述

    • MainActivity.java 代码:

      package com.qf.day18_loader_demo2;
      
      import android.app.Activity;
      import android.app.LoaderManager.LoaderCallbacks;
      import android.content.Loader;
      import android.database.ContentObserver;
      import android.database.Cursor;
      import android.net.Uri;
      import android.os.Bundle;
      import android.os.Handler;
      import android.widget.ListView;
      import android.widget.SearchView;
      import android.widget.SearchView.OnQueryTextListener;
      import android.widget.SimpleCursorAdapter;
      
      public class MainActivity extends Activity implements LoaderCallbacks<Cursor>{
      
          private ListView lv;
          private SimpleCursorAdapter adapter;
      
          private SearchView sv;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              lv = (ListView) findViewById(R.id.lv);
              sv = (SearchView) findViewById(R.id.sv);
      
      
              sv.setOnQueryTextListener(new OnQueryTextListener() {
      
                  @Override
                  public boolean onQueryTextSubmit(String query) {
                      // TODO Auto-generated method stub
                      return false;
                  }
      
                  @Override
                  public boolean onQueryTextChange(String newText) {
                      // TODO Auto-generated method stub
      
                      Bundle bundle = new Bundle();
                      bundle.putString("key", newText.toString());
      
                      getLoaderManager().restartLoader(1, bundle, MainActivity.this);
                      return false;
                  }
              });
      
      
              adapter = new SimpleCursorAdapter(
                      MainActivity.this, R.layout.item,null, 
                      new String[]{"address","body"},
                      new int[]{R.id.tv_adress,R.id.tv_body},
                      SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
      
      
              lv.setAdapter(adapter);
      
              //初始化Loader对象 
              getLoaderManager().initLoader(1, null, this);
      
              /**
               * 注册观察者对象    给当前Uri
               * 参数1:Uri对象
               * 参数2:   如果返回true    检测到 content:sms    content:sms/address   content:sms/address/iii
               *        如果返回false    只能检测到当前的content:sms    
               *        
               * 参数3:观察者
               * 
               */
              getContentResolver().registerContentObserver(
                      Uri.parse("content://sms"), true, new MyContentObserver(null));
          }
      
      
          @Override
          public Loader<Cursor> onCreateLoader(int id, Bundle args) {
              // 实例化Loader对象  并返回  
              SmsLoader smsLoader = new SmsLoader(MainActivity.this,args);
              return smsLoader;
              //看个人喜好情况使用 两种方式 如果使用以下方式 请删除上面的
      //       Uri smsUri = Uri.parse("content://sms");
      //       String[] colums = {"_id","address","body"};
      //       String selection = null;
      //       String[] selectionArgs = null;
      //      
      //      CursorLoader cursorLoader = new CursorLoader(MainActivity.this, smsUri, colums, selection, selectionArgs, null);
      //      return cursorLoader;
          }
      
          @Override
          public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
              // TODO Auto-generated method stub
              adapter.swapCursor(data);
          }
      
          @Override
          public void onLoaderReset(Loader<Cursor> loader) {
              // TODO Auto-generated method stub
              adapter.swapCursor(null);
          }
      
      
          /**
           * 自定义的观察者
           * @author sxy
           *
           */
          class MyContentObserver extends ContentObserver{
      
              public MyContentObserver(Handler handler) {
                  super(handler);
                  // TODO Auto-generated constructor stub
              }
      
              //当你的数据发生改变时  调用此方法
              @Override
              public void onChange(boolean selfChange) {
                  // TODO Auto-generated method stub
                  super.onChange(selfChange);
                  //重启Loader
                  getLoaderManager().restartLoader(1, null, MainActivity.this);
              }
      
          }
      
      
      
      }
      
    • SmsLoader.java

      package com.qf.day18_loader_demo2;
      
      import android.content.AsyncTaskLoader;
      import android.content.Context;
      import android.database.Cursor;
      import android.net.Uri;
      import android.os.Bundle;
      import android.util.Log;
      
      /**
       * 自定义的AsyncTaskLoader
       *
       *
       */
      public class SmsLoader extends AsyncTaskLoader<Cursor> {
      
          private Uri smsUri = Uri.parse("content://sms");
          private String[] colums = {"_id","address","body"};
          private String selection = null;
          private String[] selectionArgs = null;
      
      //  private Bundle bundle;
      
          public SmsLoader(Context context,Bundle bundle) {
              super(context);
              // TODO Auto-generated constructor stub
      //      this.bundle = bundle;
              if(bundle!=null){
                  selection = "body like ?";
                  selectionArgs = new String[]{"%"+bundle.getString("key")+"%"};
              }
          }
      
          /**
           * Ui线程执行
           */
          @Override
          protected void onStartLoading() {
              // TODO Auto-generated method stub
              super.onStartLoading();
      
              Log.e("AAA", "==>"+Thread.currentThread().getName());
              forceLoad();//必须执行    强制向下执行 不然此类无效
          }
      
          /**
           * 耗时操作  工作线程   可以执行查询操作
           */
          @Override
          public Cursor loadInBackground() {
              // TODO Auto-generated method stub
      
      
      
              Log.e("AAA", "==>"+Thread.currentThread().getName());
      //      Log.e("AAA", "=selection=>"+selection);
      //      Log.e("AAA", "=selectionArgs=>"+selectionArgs[0]);
              Cursor cursor = getContext().getContentResolver().query(
                      smsUri, colums, selection, selectionArgs, null);
      
              return cursor;
          }
      
      
      
      
      
      }
      
    • activity_main.xml

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          tools:context=".MainActivity" >
      
          <SearchView 
              android:id="@+id/sv"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              ></SearchView>
      
          <ListView
              android:id="@+id/lv"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
      </LinearLayout>
    • item.xml

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          tools:context=".MainActivity" >
      
          <SearchView 
              android:id="@+id/sv"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              ></SearchView>
      
          <ListView
              android:id="@+id/lv"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
      </LinearLayout>
  • 相关阅读:
    2018.11.29 Struts2中拦截器的学习&项目的实际运用
    2018.11.28 OGNL表达式与struts2框架结合的体现---在配置文件中体现(补充)
    信息化战争
    指令周期
    虚拟存储器
    Advice about life
    时间的价值
    计算机病毒的结构
    网上在线考试
    ch03_1_first.jsp
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152237.html
Copyright © 2020-2023  润新知