Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:从第二个活动刷新游标加载程序_Android_Listview_Android Activity_Android Cursorloader - Fatal编程技术网

Android:从第二个活动刷新游标加载程序

Android:从第二个活动刷新游标加载程序,android,listview,android-activity,android-cursorloader,Android,Listview,Android Activity,Android Cursorloader,祝你今天愉快。我正在学习Android开发,所以我正在创建一个简单的CRUD应用程序,现在我的主要活动是listview(MarcaActivity),下面是代码: package com.example.crudapp.activity; import android.app.Activity; import android.app.LoaderManager; import android.content.CursorLoader; import android.content.Inten

祝你今天愉快。我正在学习Android开发,所以我正在创建一个简单的CRUD应用程序,现在我的主要活动是listview(MarcaActivity),下面是代码:

package com.example.crudapp.activity;

import android.app.Activity;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Intent;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.example.crudapp.MarcaCursorAdapter;
import com.example.crudapp.R;
import com.example.crudapp.cp.MarcaCP;

public class MarcaActivity extends Activity implements
    LoaderManager.LoaderCallbacks<Cursor> {

MarcaCursorAdapter crsAdap;
ListView lstMarcas;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_marca);

    lstMarcas = (ListView)findViewById(R.id.lstMarcas);
    lstMarcas.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Intent i = new Intent(MarcaActivity.this, MarcaDetailActivity.class);
            Uri todoUri = Uri.parse(MarcaCP.CONTENT_URI + "/" + arg3);
            i.putExtra("DET", todoUri);
            i.putExtra("ACTION", "EXISTING");

            startActivity(i);
        }

    });
    getLoaderManager().initLoader(0, null, this);

    fillData();
}

protected void onRestoreInstanceState(Bundle savedInstanceState) {
    getLoaderManager().restartLoader(0, null, this);
}

@Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.insertMnu:
        Intent i = new Intent(this, MarcaDetailActivity.class);
        i.putExtra("ACTION", "NEW");
        startActivityForResult(i, 0);
        return true;
    }
    return super.onOptionsItemSelected(item);
  }

@Override
  public boolean onContextItemSelected(MenuItem item) {
    /*switch (item.) {
    case DELETE_ID:
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
          .getMenuInfo();
      Uri uri = Uri.parse(MarcaCP.CONTENT_URI + "/"
          + info.id);
      getContentResolver().delete(uri, null, null);
      fillData();
      return true;
    }*/
    return super.onContextItemSelected(item);
  }

private void fillData() {
    crsAdap = new MarcaCursorAdapter(this, R.layout.template_marcas, null , 
            new String[]{MarcaCP.Marca.NOMBRE, MarcaCP.Marca.RANKING}, new int[]{R.id.nomMarca, R.id.rankMarca});

    lstMarcas.setAdapter(crsAdap);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.marca, menu);
    return true;
}

@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
    return new CursorLoader(this, MarcaCP.CONTENT_URI,
            new String[]{MarcaCP.Marca.ID, MarcaCP.Marca.NOMBRE, MarcaCP.Marca.CODIGO, MarcaCP.Marca.RANKING}, null, null, null);
}

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
    crsAdap.swapCursor(arg1);
}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    crsAdap.swapCursor(null);
} }
但在所有示例中,我发现所有内容(在数据库中插入数据并刷新列表)都在同一个活动中,但在本例中,我有一个带有列表的活动和第二个插入项目的活动,因此我认为我必须从我的详细活动调用restartLoader,但我不知道怎么做,也不知道这样做是否正确。当我创建调用细节活动的意图,并有一个调用restartLoader的公共方法时,我正在考虑将对列表活动的引用保存在extras中,但我不知道这是否是最好的方法。从“我的详细信息”活动中刷新光标加载程序的最佳方法是什么

还有我的内容提供商MarcaCP:

package com.example.crudapp.cp;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;

import com.example.crudapp.util.ConnHandler;

public class MarcaCP extends ContentProvider {

private static final int TODOS = 10;
private static final int TODO_ID = 20;

public static final Uri CONTENT_URI = Uri.parse("content://provider.marcacp/marcas");
private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static {
    sURIMatcher.addURI("provider.marcacp", "marcas", TODOS);
    sURIMatcher.addURI("provider.marcacp", "marcas" + "/#", TODO_ID);
}

public static class Marca {
    public static final String TABLA = "MARCA";
    public static final String ID = "_id";
    public static final String CODIGO = "codigo";
    public static final String NOMBRE = "nombre";
    public static final String CLASIFICACION = "clasificacion";
    public static final String RANKING = "ranking";
}

private ConnHandler conn;
SQLiteDatabase dbObj;

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int uriType = sURIMatcher.match(uri);
    int rowsDeleted = 0;
    switch (uriType) {
    case TODOS:
      rowsDeleted = dbObj.delete(Marca.TABLA, selection, selectionArgs);
      break;
    case TODO_ID:
      String id = uri.getLastPathSegment();
      if (TextUtils.isEmpty(selection)) {
        rowsDeleted = dbObj.delete(Marca.TABLA,
            Marca.ID + " = " + id, 
            null);
      } else {
        rowsDeleted = dbObj.delete(Marca.TABLA,
           Marca.ID + " =" + id 
            + " and " + selection,
            selectionArgs);
      }
      break;
    default:
      throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowsDeleted;
}

@Override
public String getType(Uri uri) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    int uriType = sURIMatcher.match(uri);

    long id = 0;
    switch (uriType) {
    case TODOS:
      id = dbObj.insert(Marca.TABLA, null, values);
      break;
    default:
      throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return Uri.parse("marca/" + id);
}

@Override
public boolean onCreate() {
    conn = new ConnHandler(getContext());
    dbObj = conn.getDb();
    return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    // Uisng SQLiteQueryBuilder instead of query() method
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    checkColumns(projection);
    queryBuilder.setTables(Marca.TABLA);

    int uriType = sURIMatcher.match(uri);

    switch (uriType) {
    case TODOS:
      break;
    case TODO_ID:
        // Digamos para ver el detalle de un registro
        queryBuilder.appendWhere(Marca.ID + " = "
            + uri.getLastPathSegment());
        break;
      default:
        throw new IllegalArgumentException("Unknown URIx: " + uri);
      }


    Cursor cur = queryBuilder.query(dbObj, projection, selection,
                    selectionArgs, null, null, sortOrder);
    return cur;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
        String[] selectionArgs) {
    int uriType = sURIMatcher.match(uri);
    int rowsUpdated = 0;
    switch (uriType) {
    case TODOS:
      rowsUpdated = dbObj.update(Marca.TABLA, 
          values, 
          selection,
          selectionArgs);
      break;
    case TODO_ID:
      String id = uri.getLastPathSegment();
      if (TextUtils.isEmpty(selection)) {
        rowsUpdated = dbObj.update(Marca.TABLA, 
            values,
            Marca.ID + " =" + id, 
            null);
      } else {
        rowsUpdated = dbObj.update(Marca.TABLA, 
            values,
            Marca.ID + " =" + id 
            + " and " 
            + selection,
            selectionArgs);
      }
      break;
    default:
      throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowsUpdated;
}

private void checkColumns(String[] projection) {
    /*String[] available = { TodoTable.COLUMN_CATEGORY,
        TodoTable.COLUMN_SUMMARY, TodoTable.COLUMN_DESCRIPTION,
        TodoTable.COLUMN_ID };
    if (projection != null) {
      HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
      HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(available));
      // Check if all columns which are requested are available
      if (!availableColumns.containsAll(requestedColumns)) {
        throw new IllegalArgumentException("Unknown columns in projection");
      }
    }*/
  }   }
package com.example.crudapp.cp;
导入android.content.ContentProvider;
导入android.content.ContentValues;
导入android.content.UriMatcher;
导入android.database.Cursor;
导入android.database.sqlite.SQLiteDatabase;
导入android.database.sqlite.SQLiteQueryBuilder;
导入android.net.Uri;
导入android.text.TextUtils;
导入com.example.crudapp.util.ConnHandler;
公共类MarcaCP扩展了ContentProvider{
专用静态最终int TODOS=10;
私有静态最终int TODO_ID=20;
公共静态最终Uri内容\u Uri=Uri.parse(“content://provider.marcacp/marcas");
私有静态最终UriMatcher sURIMatcher=新UriMatcher(UriMatcher.NO_匹配);
静止的{
addURI(“provider.marcacp”、“marcas”、“TODOS”);
addURI(“provider.marcacp”,“marcas”+“/#”,TODO_ID);
}
公共静态类Marca{
公共静态最终字符串TABLA=“MARCA”;
公共静态最终字符串ID=“\u ID”;
公共静态最终字符串CODIGO=“CODIGO”;
公共静态最终字符串NOMBRE=“NOMBRE”;
公共静态最终字符串CLASIFICACION=“CLASIFICACION”;
公共静态最终字符串RANKING=“RANKING”;
}
私人康涅狄格州;
sqlitedbobj数据库;
@凌驾
public int delete(Uri、字符串选择、字符串[]selectionArgs){
int-uriType=sURIMatcher.match(uri);
int rowsDeleted=0;
开关(URI型){
待办事项:
rowsDeleted=dbObj.delete(Marca.TABLA,selection,selectionArgs);
打破
待办案件编号:
String id=uri.getLastPathSegment();
if(TextUtils.isEmpty(选择)){
rowsDeleted=dbObj.delete(Marca.TABLA,
Marca.ID+“=”+ID,
无效);
}否则{
rowsDeleted=dbObj.delete(Marca.TABLA,
Marca.ID+“=”+ID
+"及"选择,,
选择;
}
打破
违约:
抛出新的IllegalArgumentException(“未知URI:+URI”);
}
getContext().getContentResolver().notifyChange(uri,null);
返回删除的行;
}
@凌驾
公共字符串getType(Uri){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共Uri插入(Uri、ContentValues){
int-uriType=sURIMatcher.match(uri);
长id=0;
开关(URI型){
待办事项:
id=dbObj.insert(Marca.TABLA,null,value);
打破
违约:
抛出新的IllegalArgumentException(“未知URI:+URI”);
}
getContext().getContentResolver().notifyChange(uri,null);
返回Uri.parse(“marca/”+id);
}
@凌驾
公共布尔onCreate(){
conn=新的ConnHandler(getContext());
dbObj=conn.getDb();
返回true;
}
@凌驾
公共游标查询(Uri、字符串[]投影、字符串选择、,
字符串[]selectionArgs,字符串排序器){
//使用SQLiteQueryBuilder代替query()方法
SQLiteQueryBuilder queryBuilder=newsqlitequerybuilder();
检查列(投影);
queryBuilder.setTables(Marca.TABLA);
int-uriType=sURIMatcher.match(uri);
开关(URI型){
待办事项:
打破
待办案件编号:
//登记册上的数字图书馆
queryBuilder.appendWhere(Marca.ID+“=”
+getLastPathSegment());
打破
违约:
抛出新的IllegalArgumentException(“未知URIx:+uri”);
}
Cursor cur=queryBuilder.query(dbObj、投影、选择、,
selectionArgs、null、null、sortOrder);
返回电流;
}
@凌驾
公共int更新(Uri、ContentValues、字符串选择、,
字符串[]selectionArgs){
int-uriType=sURIMatcher.match(uri);
int rowsUpdated=0;
开关(URI型){
待办事项:
rowsUpdated=dbObj.update(Marca.TABLA,
价值观
选择,
选择;
打破
待办案件编号:
String id=uri.getLastPathSegment();
if(TextUtils.isEmpty(选择)){
rowsUpdated=dbObj.update(Marca.TABLA,
价值观
Marca.ID+“=”+ID,
无效);
}否则{
rowsUpdated=dbObj.update(Marca.TABLA,
价值观
Marca.ID+“=”+ID
+“和”
+选择,
选择;
}
打破
违约:
抛出新的IllegalArgumentException(“未知URI:+URI”);
}
getContext().getContentResolver().notifyChange(uri,null);
返回原始数据;
}
私有void检查列(字符串[]投影){
/*String[]available={TodoTable.COLUMN_CATEGORY,
TodoTable.COLUMN\u摘要,TodoTable.COLUMN\u说明,
TodoTable.COLUMN_ID};
if(投影!=null){
HashSet requestedColumns=新的HashSet(Arrays.asList(projection));
HashSet availableColumns=新的HashSet(Arrays.asList(available));
//检查请求的所有列是否都可用
如果(!availableColumns.containsAll(requestedColumns)){
抛出新的IllegalArgumentException(“投影中的未知列”);
getLoaderManager().restartLoader(LIST_ID, null, this);
package com.example.crudapp.cp;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;

import com.example.crudapp.util.ConnHandler;

public class MarcaCP extends ContentProvider {

private static final int TODOS = 10;
private static final int TODO_ID = 20;

public static final Uri CONTENT_URI = Uri.parse("content://provider.marcacp/marcas");
private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static {
    sURIMatcher.addURI("provider.marcacp", "marcas", TODOS);
    sURIMatcher.addURI("provider.marcacp", "marcas" + "/#", TODO_ID);
}

public static class Marca {
    public static final String TABLA = "MARCA";
    public static final String ID = "_id";
    public static final String CODIGO = "codigo";
    public static final String NOMBRE = "nombre";
    public static final String CLASIFICACION = "clasificacion";
    public static final String RANKING = "ranking";
}

private ConnHandler conn;
SQLiteDatabase dbObj;

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int uriType = sURIMatcher.match(uri);
    int rowsDeleted = 0;
    switch (uriType) {
    case TODOS:
      rowsDeleted = dbObj.delete(Marca.TABLA, selection, selectionArgs);
      break;
    case TODO_ID:
      String id = uri.getLastPathSegment();
      if (TextUtils.isEmpty(selection)) {
        rowsDeleted = dbObj.delete(Marca.TABLA,
            Marca.ID + " = " + id, 
            null);
      } else {
        rowsDeleted = dbObj.delete(Marca.TABLA,
           Marca.ID + " =" + id 
            + " and " + selection,
            selectionArgs);
      }
      break;
    default:
      throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowsDeleted;
}

@Override
public String getType(Uri uri) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    int uriType = sURIMatcher.match(uri);

    long id = 0;
    switch (uriType) {
    case TODOS:
      id = dbObj.insert(Marca.TABLA, null, values);
      break;
    default:
      throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return Uri.parse("marca/" + id);
}

@Override
public boolean onCreate() {
    conn = new ConnHandler(getContext());
    dbObj = conn.getDb();
    return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    // Uisng SQLiteQueryBuilder instead of query() method
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    checkColumns(projection);
    queryBuilder.setTables(Marca.TABLA);

    int uriType = sURIMatcher.match(uri);

    switch (uriType) {
    case TODOS:
      break;
    case TODO_ID:
        // Digamos para ver el detalle de un registro
        queryBuilder.appendWhere(Marca.ID + " = "
            + uri.getLastPathSegment());
        break;
      default:
        throw new IllegalArgumentException("Unknown URIx: " + uri);
      }


    Cursor cur = queryBuilder.query(dbObj, projection, selection,
                    selectionArgs, null, null, sortOrder);
    return cur;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
        String[] selectionArgs) {
    int uriType = sURIMatcher.match(uri);
    int rowsUpdated = 0;
    switch (uriType) {
    case TODOS:
      rowsUpdated = dbObj.update(Marca.TABLA, 
          values, 
          selection,
          selectionArgs);
      break;
    case TODO_ID:
      String id = uri.getLastPathSegment();
      if (TextUtils.isEmpty(selection)) {
        rowsUpdated = dbObj.update(Marca.TABLA, 
            values,
            Marca.ID + " =" + id, 
            null);
      } else {
        rowsUpdated = dbObj.update(Marca.TABLA, 
            values,
            Marca.ID + " =" + id 
            + " and " 
            + selection,
            selectionArgs);
      }
      break;
    default:
      throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowsUpdated;
}

private void checkColumns(String[] projection) {
    /*String[] available = { TodoTable.COLUMN_CATEGORY,
        TodoTable.COLUMN_SUMMARY, TodoTable.COLUMN_DESCRIPTION,
        TodoTable.COLUMN_ID };
    if (projection != null) {
      HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
      HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(available));
      // Check if all columns which are requested are available
      if (!availableColumns.containsAll(requestedColumns)) {
        throw new IllegalArgumentException("Unknown columns in projection");
      }
    }*/
  }   }
<provider android:name=".cp.MarcaCP" android:authorities="provider.marcacp" />