我的场景是,我有一个可扩展列表视图动态添加i和列表中的子项。我的孩子布局就是这样。
当我点击带有相应项目的编辑按钮时,我打开对话框从用户获取输入并点击更新各自的详细更新到数据库。
现在从数据库中检索所有数据并设置为可扩展列表视图。 希望你了解我的情况。
我的更新对话框代码。
try {
alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mET_asset_amount.getText().toString().isEmpty() || mET_asset_return_pretext.getText().toString().isEmpty() || mET_asset_texrate.getText().toString().isEmpty()) {
// mErrorMessage.setVisibility(View.VISIBLE);
Toast.makeText(mContext, "Please fill detail", Toast.LENGTH_SHORT).show();
} else {
assetTable = new AssetTable(mContext);
UtilClass.asset_amount = Integer.parseInt(mET_asset_amount.getText().toString());
UtilClass.asset_return_pretext = Integer.parseInt(mET_asset_return_pretext.getText().toString());
UtilClass.asset_texrate = Integer.parseInt(mET_asset_texrate.getText().toString());
Log.e("Inputed data", UtilClass.asset_amount + " " + UtilClass.asset_return_pretext + " " + UtilClass.asset_texrate);
assetTable.assetUpdate(assetChild.getmAssetName());
}
}
});
alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialogBuilder.show();
} catch (Exception e) {
Log.e("Error in add asset", e.toString());
}
我的适配器中的代码。 它正确更新数据但不刷新可扩展列表视图。
我的问题是,当我点击“确定”按钮更新对话框时,我想刷新可扩展列表视图。我陷入了这个问题。请任何人都可以提供帮助。
非常感谢你。答案 0 :(得分:1)
在对话框的“确定”按钮中完成更新操作后。你需要再次获取Adapter的List / Array中的数据并调用notifyDatasetChanged()方法。
例如:
alertDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(mET_asset_amount.getText().toString().isEmpty()
|| mET_asset_return_pretext.getText().toString().isEmpty()
|| mET_asset_texrate.getText().toString().isEmpty()) {
// mErrorMessage.setVisibility(View.VISIBLE);
Toast.makeText(mContext, "Please fill detail", Toast.LENGTH_SHORT).show();
} else {
assetTable = new AssetTable(mContext);
UtilClass.asset_amount = Integer.parseInt(mET_asset_amount.getText().toString());
UtilClass.asset_return_pretext = Integer.parseInt(mET_asset_return_pretext.getText().toString());
UtilClass.asset_texrate = Integer.parseInt(mET_asset_texrate.getText().toString());
Log.e("Inputed data", UtilClass.asset_amount + " " + UtilClass.asset_return_pretext + " " + UtilClass.asset_texrate);
assetTable.assetUpdate(assetChild.getmAssetName());
//Fetch the data from the database again in the Adapter/add the new item
adapter.notifyDatasetChanged();
}
}
});
希望这有帮助。
答案 1 :(得分:0)
只要您想刷新或更新列表元素,就需要调用notifyDatasetChanged()
。
public void notifyDataSetChanged ()
Added in API level 1
Notifies the attached observers that the underlying data has been changed and any View reflecting the data set should refresh itself.
请参阅此链接: - http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetInvalidated()
如果在适配器上使用add(),insert(),remove()和clear(),则 notifyDatasetChanged()
可以正常工作。
你必须从主线程中调用它,否则它不会向适配器反映任何东西。
请参阅此链接以实施notifyDatasetChanged: - http://androidadapternotifiydatasetchanged.blogspot.in/
答案 2 :(得分:0)
我有类似的问题。我在我的ExpandableList适配器中覆盖了notifyDataSetChanged。我删除了旧数据并添加了更新的数据。
@Override
public void notifyDataSetChanged() {
treeSetMain.clear();
treeSetMain.trimToSize();
treeSetSub.clear();
treeSetSub.trimToSize();
treeSetMain = new ArrayList<>(MyDataBase.getInstance(context).getAllMainGroups());
treeSetSub = new ArrayList<>(MyDataBase.getInstance(context).getAllSubGroups());
super.notifyDataSetChanged();
}