gpt4 book ai didi

android - 清空 ListView,即使添加了项目

转载 作者:行者123 更新时间:2023-11-30 03:51:57 26 4
gpt4 key购买 nike

我见过类似的问题,但没有一个和我的完全一样,而且我无法理解答案,所以我希望你能帮助我。 thread我指的是以某种方式解决了异步任务或其他问题,但我不确定那是什么。我的问题是我的布局有一个 TextView,在一个 ListView 下方。 ListView 和 TextView 都是动态更新的。根据我更新列表(并登录到 LogCat)的方法,添加了条目。

12-23 18:31:03.185: D/FileHandle.readList(24083): Read 1 entries

12-23 18:31:03.185: D/MainActivity.updateList(24083): Updating List with 1 entries

但我只看到 TextView 而没有列表。这是布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/txt_path"
android:textSize="25sp" />

<ListView android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/list"
android:longClickable="true" >
</ListView>
<!--android:id="@android:id/list" />-->

</LinearLayout>

下面是读取和更新列表的代码:

private TextView mPathView;
private ListView mListView;
private String mPath;
private String mCurrentList;
private ArrayList<ListEntry> mList = new ArrayList<ListEntry>();
private ArrayAdapter<String> mAdapter;
private List<String> mListContent = new ArrayList<String>();


/**
* Calls readList(mCurrentList)
*/
private void readList() {
readList(mCurrentList);
}
/**
* Reads items from list into mListContent
*
* @param listName name of the list
*/
private void readList(String listName) {
if (mCurrentList.compareToIgnoreCase(listName) != 0) {
mPath += "/" + listName;
}
mCurrentList = listName;
Log.d(TAG + ".readList", "Reading List " + listName);
mList = FileHandle.readList(context, listName);
}
/**
* Updates the list shown with the content of mListContent.
*/
private void updateList() {
mListContent.clear();
for (ListEntry e : mList) {
mListContent.add(e.toString());
}

Log.d(TAG + ".updateList", "Updating List with " + mList.size() + " entries");
mAdapter.notifyDataSetChanged();
}

FileHandle 中的静态方法正在运行。我之前在没有布局和没有 TextView 的情况下测试了代码,只有普通的 ListView,它工作正常。

这是我的 onCreate 方法

/**
* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle icicle) {
Log.d(TAG + ".onCreate", "Launching Activity");
super.onCreate(icicle);
setContentView(R.layout.main_layout);

MainActivity.context = getApplicationContext();
mPathView = (TextView) findViewById(R.id.txt_path);
mPath = mCurrentList = getString(R.string.rootlist);
mListView = (ListView) findViewById(R.id.list);
ListEntry.init(getApplicationContext());
FileHandle.init(getApplicationContext());


mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mListContent);

mPathView.setText(mPath);
mListView.setAdapter(mAdapter);

readList();
updateList();
}

如果有人能给我一个正确方向的提示,那就太好了!

You can only the see TextView, not the List

最佳答案

根本问题
我不相信我花了这么长时间才注意到......但是你需要使用 vertical 方向:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

ListView 一直不在屏幕上。


其他潜在问题
在使用 setAdapter() 填充 mAdapter 之后,您需要将新的 Adapter 传递给您的 ListView。 notifyDataSetChanged() 在这种情况下不会执行您想要的操作。


或者,您可以在 onCreate() 中稍微更改代码的顺序:

mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mListContent);

mListView.setAdapter(mAdapter);

readList();
updateList();

接下来将 mListContent 制作成一个列表:

List<String> mListContent = new ArrayList<String>();

最后更改updateList():

private void updateList() {
mListContent.clear();
for (int i = 0; i < mList.size(); i++) {
mListContent.add(mList.get(i).toString());
}

Log.d(TAG + ".updateList", "Updating List with " + mList.size() + " entries");
mAdapter.notifyDataSetChanged();
}

按此顺序,notiftyDataSetChanged() 应该起作用。

关于android - 清空 ListView,即使添加了项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013193/

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