android gridview填充方式,android – 如何更新具有从Sqlite填充的Gridview的Fragment

我有一个带有两个标签的ViewPager,它们包含片段.在第一个片段中,我有一个Gridview,其中填充了Sqlite Db.

我的Activity中有一个自定义alertdialog,它是Fragments的父级.

当alertdialog关闭时,它会添加/删除/更新Sqlite Db:

DataBaseHelper dbh = DataBaseHelper(this);

...

positiveButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

dbh.addVal(new TheData(editName.getText().toString(), editAge.getText().toString())); //adds a row to the Sqlite Db

dialog.dismiss();

//on dismiss, refresh the Fragment, which in turn will display the updated GridView.

}

});

...

如何更新完成以下内容:

//on dismiss, refresh the Fragment, which in turn will display the updated GridView.

解决方法:

>在要更新数据的片段中创建BroadcastReceiver实例.

>创建一个IntentFilter并为其设置一个操作字符串(可能是’db.update’)并将其注册到您的应用程序上下文中(您可以通过调用getActivity()通过您的片段来完成此操作.getApplicationContext().registerReceiver(receiver,filter) .

>在AlertDialog中,更新数据库后,使用您在上面设置的相同操作字符串(在我们的示例中为“db.update”)创建一个Intent,并使用上下文将其发送出去(getActivity().getApplicationContext().sendBroadcast (意图)).您的BroadcastReceiver的onReceive()方法将在您的片段中调用,您可以调用该方法刷新或重新加载您的数据.请参阅以下示例代码:

说这是你的片段

public class YourFragment extends Fragment {

private GridView mGridView;

private BaseAdapter mAdapter;

private BroadcastReceiver mReceiver;

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

//inflate view as usual

View view = inflater.inflate(R.layout.yourlayour, container, false);

...

//create instance of broadcast receiver

mReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) { //when intent is receiver, this method is called

if(intent.getAction().contentEquals("db.update")){

//update intent received, call method to refresh your content loader

refreshFragment();

}

}

};

//create a new intent filter

IntentFilter mDataUpdateFilter = new IntentFilter("db.update");

//register our broadcast receiver and intent filter

getActivity().getApplicationContext().registerReceiver(mReceiver, mDataUpdateFilter);

return view;

}

@Override

public void onDestroy() {

super.onDestroy();

//never forget to unregister the receiver when you're done, it could cause your app to crash

//if it receives an intent and calls null pointing methods in your code

getActivity().getApplicationContext().unregisterReceiver(mReceiver);

} }

然后在上面的AlertDialog中,通过以下方式将意图发送给此接收器:

DataBaseHelper dbh = DataBaseHelper(this);

...

positiveButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

dbh.addVal(new TheData(editName.getText().toString(), editAge.getText().toString())); //adds a row to the Sqlite Db

//Create an intent with our action

Intent updateIntent = new Intent("db.update");

//send the intent by

getContext().getApplicationContext().sendBroadcast(updateIntent);

dialog.dismiss();

}

});

...

片段被销毁时,不要忘记取消注册广播接收器.调用getActivity().getApplicationContext().unregisterReceiver(receiver);在你的onDestroy()方法中.

我还应该指出,即使你从后台线程发送你的意图,你的广播接收器的onReceive()方法也会在主线程上被调用.

标签:android,android-fragments,sqlite

来源: https://codeday.me/bug/20190926/1820533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值