实现ContentResolver对ContentProvider内容的修改

本文主要介绍如何通过ContentResolver实现对ContentProvider内容的修改,无需复杂的ContentProvider配置,只需关注ContentResolver的使用。文章提供了MainActivity的布局文件以及ListView的自定义布局,并展示了主要的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果大家想看ContentProvider的实现流程,请关注博主查看博主博客,感谢大家的支持,


ContentResolver的实现没有ContentProvider复杂,不需要配置清单文件(除访问系统的权限要添加外,自己模拟底层的就不用了)不多说了 直接上代码



MainActivity的布局文件

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="ID"
        android:id="@+id/et_main_id"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取数据"
        android:id="@+id/bt_mainsss_button"
        />
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lv_list"
        ></ListView>


由于长按修改和Listview自己定义的布局。所以也加上来


先上长按修改的布局

<TextView
        android:id="@+id/tv_dialog_list_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/et_dialog_list_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp" />

    <EditText
        android:id="@+id/et_dialog_list_age"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn_dialog_list_ok"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="确定修改" />

        <Button
            android:id="@+id/btn_dialog_list_nook"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消修改" />
    </LinearLayout>

然后是ListView的布局文件

 <TextView
        android:id="@+id/tv_list_id"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/tv_list_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <TextView
        android:id="@+id/tv_list_age"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1" />


MainActivity的主要代码

public class MainActivity extends AppCompatActivity {


    private EditText et_main_id;
    private Button bt_mainsss_button;
    private Uri uri;
    private ContentResolver cr;
    private ListView lv_list;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        et_main_id = (EditText) findViewById(R.id.et_main_id);
        bt_mainsss_button = (Button) findViewById(R.id.bt_mainsss_button);
        lv_list = (ListView) findViewById(R.id.lv_list);
        //获得内容访问者
        cr = getContentResolver();
        //点击事件
        bt_mainsss_button.setOnClickListener(new View.OnClickListener() {

            private SimpleCursorAdapter simpleCursorAdapter;

            @Override
            public void onClick(View view) {
                if (TextUtils.isEmpty(et_main_id.getText().toString())) {
                    //查询所有
                    uri = Uri.parse("content://com.example.contentprovider.PERSON/student");
                } else {
                    //查询单个
                    String id = et_main_id.getText().toString();
                    uri = Uri.parse("content://com.example.contentprovider.PERSON/student/" + id);
                }
                Cursor cursor = cr.query(uri, null, null, null, null);
                //SimleCursorAdapter
                while (cursor.moveToNext()) {
                    int id = cursor.getInt(cursor.getColumnIndex("_id"));
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    int age = cursor.getInt(cursor.getColumnIndex("age"));
                    Log.i("test", id + " " + name + " " + age);

//                        simpleCursorAdapter.changeCursor(cursor);
                }
                simpleCursorAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item_list, cursor, new String[]{"_id", "name", "age"}, new int[]{R.id.tv_list_id, R.id.tv_list_name, R.id.tv_list_age});
                lv_list.setAdapter(simpleCursorAdapter);
            }
        });
        lv_list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            private EditText et_dialog_list_name;
            private EditText et_dialog_list_age;
            private TextView tv_dialog_list_id;

            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                LinearLayout root = (LinearLayout) view;
                String id = ((TextView) root.findViewById(R.id.tv_list_id)).getText().toString();
                String name = ((TextView) root.findViewById(R.id.tv_list_name)).getText().toString();
                String age = ((TextView) root.findViewById(R.id.tv_list_age)).getText().toString();

                final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                final AlertDialog alertDialog = builder.create();

                //点击空白处,不取消对话框
                alertDialog.setCancelable(false);
                View v = View.inflate(MainActivity.this, R.layout.dialog, null);
                tv_dialog_list_id = (TextView) v.findViewById(R.id.tv_dialog_list_id);
                et_dialog_list_name = (EditText) v.findViewById(R.id.et_dialog_list_name);
                et_dialog_list_age = (EditText) v.findViewById(R.id.et_dialog_list_age);

                tv_dialog_list_id.setText(id);
                et_dialog_list_name.setText(name);
                et_dialog_list_age.setText(age);
                ((Button) v.findViewById(R.id.btn_dialog_list_ok)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        String _id=tv_dialog_list_id.getText().toString();
                        String _name=et_dialog_list_name.getText().toString();
                        String _age=et_dialog_list_age.getText().toString();
                        Toast.makeText(MainActivity.this, "_id"+_id+"_name"+_name+"_age"+_age, Toast.LENGTH_SHORT).show();
//如果要实现修改后刷新,只要在关闭前在查一次就行
                        ContentValues values=new ContentValues();
                        values.put("name",""+_name);
                        values.put("age",""+_age);
                        cr.update(uri,values,"_id=?",new String[]{_id});
                        alertDialog.dismiss();
                    }
                });
                ((Button) v.findViewById(R.id.btn_dialog_list_nook)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //关闭当前对话框
                        alertDialog.dismiss();
                    }
                });



                alertDialog.setView(v);
                alertDialog.show();
                return true;
            }
        });

    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值