在Android上,我如何ListView根据用户输入进行过滤,其中显示的项目是根据TextView值动态更新的?
我正在寻找这样的东西:
-------------------------
| Text View |
-------------------------
| List item |
| List item |
| List item |
| List item |
| |
| |
| |
| |
-------------------------
Run Code Online (Sandbox Code Playgroud) 我有一个Cursor,它返回我使用SimpleCursorAdapter的行来填充ListView.我想过滤一些行,这样它们就不会显示在我的ListView中.我使用Activity中其他行的数据,因此我不想更改我的SQL以使用WHERE子句过滤它们.
保持一行不在ListView中显示的最佳方法是什么?理想情况下,我会检查我的行中的列,然后只向ListView添加满足条件的行.
Android问题中讨论了这个问题:过滤listview时检查了错误的项目.总结该问题,当使用带有CursorAdapter和过滤器的列表视图时,在过滤后的列表中选择的项目将在删除过滤器后丢失其选择,而是选择未过滤列表中该位置的项目.
使用上面链接问题中的代码示例,我们应该在哪里放置代码来标记复选框.我相信它应该在CustomCursorAdapter的getView()方法中,但我不确定.另外,我们如何访问包含自定义适配器类中所有selectedIds的HashSet,因为它将在保存列表的主活动中初始化和修改.
我实现ListView的活动
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.selectfriends);
Log.v(TAG, "onCreate called") ;
selectedIds = new ArrayList<String>() ;
selectedLines = new ArrayList<Integer>() ;
mDbHelper = new FriendsDbAdapter(this);
mDbHelper.open() ;
Log.v(TAG, "database opened") ;
Cursor c = mDbHelper.fetchAllFriends();
startManagingCursor(c);
Log.v(TAG, "fetchAllFriends Over") ;
String[] from = new String[] {mDbHelper.KEY_NAME};
int[] to = new int[] { R.id.text1 };
final ListView listView = getListView();
Log.d(TAG, "Got listView");
// Now initialize the adapter and set it to display using …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个有效的联系人列表,但是当我单击任何联系人时,我只能从 ListView 获得 Android 屏幕上第 1 个项目的联系人编号。
我想获得该职位点击联系人的电话号码。我在网上到处搜索,但没有得到任何解决方案,我试图解决这个问题过去 13 天,但我仍然无法解决这个问题,如果有人能解决这个问题,请回答。感谢兄弟/姐妹的帮助!
li.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView txtNummber = li.findViewById(android.R.id.text2)
}
});
Run Code Online (Sandbox Code Playgroud) 在我们的项目中,我们经常处理列表,并在过去使用它并使用以下“模式”:
ListView 位于 Fragment 中,在 onActivityCreated 中初始化,我们首先启动 CursorLoaders,然后在 onFinish 中将 Cusor 交换到 ListAdapter。然后,我们使用 filterQueryProvider 实现了搜索功能,该功能仅通过 contentResolver.query(...) 返回游标。如果我在选择列表中的某些内容时进行了一些方向更改,则在许多情况下(不定期)会出现以下错误:
android.database.StaleDataException: Attempted to access a cursor after it has been closed.
12-05 10:36:59.531: E/ACRA(12079): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
12-05 10:36:59.531: E/ACRA(12079): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
12-05 10:36:59.531: E/ACRA(12079): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3378)
12-05 10:36:59.531: E/ACRA(12079): at android.app.ActivityThread.access$700(ActivityThread.java:127)
12-05 10:36:59.531: E/ACRA(12079): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1162)
12-05 10:36:59.531: E/ACRA(12079): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 10:36:59.531: E/ACRA(12079): at android.os.Looper.loop(Looper.java:137)
12-05 10:36:59.531: E/ACRA(12079): at android.app.ActivityThread.main(ActivityThread.java:4448)
12-05 10:36:59.531: E/ACRA(12079): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 10:36:59.531: E/ACRA(12079): at java.lang.reflect.Method.invoke(Method.java:511)
12-05 …Run Code Online (Sandbox Code Playgroud)