gpt4 book ai didi

java - 任何更改后 ListView 更新

转载 作者:行者123 更新时间:2023-12-02 06:49:58 25 4
gpt4 key购买 nike

我的 Android 应用程序中有一个 ListView ,它使用 ListView 本身执行两个功能。

首先,我可以从 ListView 中删除一个项目。

其次,我可以在 ListView 中重命名某些内容。

只要发生上述任何一种情况,

如果 ListView 上的最后一项被删除,如何显示不同的 XML 布局?

adapter = new SetRowsCustomAdapter(getActivity(), R.layout.customlist, rowsArray);
dataList = (ListView) mFrame3.findViewById(R.id.lvFiles); //lvfiles from xml layout
dataList.setAdapter(adapter);
dataList.setEmptyView(noFilesDisplayed); //not working

其次,一旦我重命名了 ListView 中的任何内容,如何更新 ListView 以反射(reflect)更改?

adapter.notifyDataSetChanged(); //not working

我的上下文菜单中有两个选择,删除重命名

如果选择删除,则执行以下代码:

if (menuItemIndex == 0) {
if (folder.exists()) {
//File flEachFile = new File(folder.toString() + "/" + currentFileName + ".tp");
flEachFile = new File(folder.toString() + "/" + txt + ".tp");
flEachFile2 = new File(folder.toString() + "/." + txt + ".tp");
if (flEachFile.exists()) {
flEachFile.delete();
}
if (flEachFile2.exists()) {
flEachFile2.delete();
}
adapter.remove(adapter.getItem(info.position)); //updated the list
//adapter.notifyDataSetChanged();
dataList.invalidate();
dataList.setEmptyView(noFilesDisplayed);//should display the noFilesDisplayed layout but it's not.
//getActivity().getActionBar().setSelectedNavigationItem(1);
}
}

这工作正常,因为当我删除列表时列表会自行更新。因此,如果 View 中有两个列表,并且我删除了其中一个,则列表会更新以显示一个:

adapter.remove(adapter.getItem(info.position)); //updated the list

但是,如果我删除列表中的最后一项,并且我想显示另一个 xml 布局,如下行所示:

dataList.setEmptyView(noFilesDisplayed);//should display the noFilesDisplayed layout but it's not.

这不起作用。

================================================== =======

如果选择重命名,则会执行以下代码:

if (menuItemIndex == 1) {
// custom dialog
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.renamefile);
dialog.setTitle("Rename Existing Trip");

currTrip = (TextView) dialog.findViewById(R.id.tvCurrentFileName);
currTrip.setText(txt);

etRT = (EditText) dialog.findViewById(R.id.etRenameTo);
Button btnCancel = (Button) dialog.findViewById(R.id.btnCancel);
Button btnApply = (Button) dialog.findViewById(R.id.btnApply);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

btnApply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(folder.exists()) {
flEachFile = new File(folder.toString() + "/" + currTrip.getText().toString() + ".tp");
flEachFile2 = new File(folder.toString() + "/." + currTrip.getText().toString() + ".tp");
if (flEachFile.exists()) {
if (etRT.getText().toString().matches("")) {
rTo = (TextView) dialog.findViewById(R.id.tvRenameTo);
rTo.setTextColor(Color.parseColor("#A60000"));
}
else {
File toFile = new File(folder.toString() + "/" + etRT.getText().toString() + ".tp");
flEachFile.renameTo(toFile);
if (flEachFile2.exists()) {
File toFile2 = new File(folder.toString() + "/." + etRT.getText().toString() + ".tp");
flEachFile2.renameTo(toFile2);
}
//adapter.notifyDataSetChanged();
dataList.invalidate();
dialog.dismiss();
//getActivity().getActionBar().setSelectedNavigationItem(1);
}
}
else {
Toast.makeText(getActivity(), "File does not exist", Toast.LENGTH_SHORT).show();
}
}

}
});
// if cancel is clicked, close the custom dialog
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}

只有切换选项卡并返回此选项卡,我才能看到更改。

最佳答案

最好通过其关联的适配器(在本例中为 SetRowCustomAdapter)与 ListView 进行交互。要删除项目,您应该执行adapter.remove(position),它将自动处理notifyDataSetChanged()函数,并在内部将其从其所在的任何数据结构中删除。至于重命名某事,这取决于您如何在适配器中对幕后数据进行建模。您能为您的客户适配器提供更多代码吗?您在内部使用数组吗?

更新

关于 setEmptyView(noFilesDisplayed) 不起作用,noFilesDisplayed 是否与 ListView 位于同一布局层次结构中?根据我的经验(也已被其他人验证),空 View (在本例中为 noFilesDisplayed)必须位于同一布局 XML 文件中,更具体地说,必须位于同一层次结构中。我个人不知道为什么必须这样,但似乎这是唯一的工作方式。这是我的意思的例子......

<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

<View
android:id="@+id/empty_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone" />

然后在代码中,您可以将 noFilesDisplayed 指向资源 ID empty_view。我不完全确定是否有必要将可见性设置为“消失”,请尝试尝试一下。我希望这能回答您关于空 View 的问题。

关于java - 任何更改后 ListView 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com