可扩展列表视图刷新自动化?

时间:2015-02-27 05:58:05

标签: android expandablelistview expandablelistadapter

我的场景是,我有一个可扩展列表视图动态添加i和列表中的子项。我的孩子布局就是这样。

enter image description here

当我点击带有相应项目的编辑按钮时,我打开对话框从用户获取输入并点击更新各自的详细更新到数据库。

现在从数据库中检索所有数据并设置为可扩展列表视图。 希望你了解我的情况。

我的更新对话框代码。

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());
            }

我的适配器中的代码。 它正确更新数据但不刷新可扩展列表视图。

我的问题是,当我点击“确定”按钮更新对话框时,我想刷新可扩展列表视图。我陷入了这个问题。请任何人都可以提供帮助。

非常感谢你。

3 个答案:

答案 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();
    }