【问题标题】:Removing ListView after user selects item用户选择项目后删除 ListView
【发布时间】:2011-06-29 10:49:20
【问题描述】:

这个应该很简单。用例是我有一个由语音搜索结果生成的 ListView。一旦用户从列表中选择了适当的项目,我希望列表消失。将不再需要此列表(其内容)。我知道这可以通过多种方式完成,但我没有足够的经验知道哪个是最好的(最快,最有效的移动资源......等等)我使用过 clearChoices(), setVisibility(2) 'Gone '。无论如何,我想我会去源头寻求正确的答案。

一如既往地感谢您的帮助。这里是相关代码,如果你喜欢:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {

        mList = (ListView) findViewById(R.id.list);

        ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));

        mList.setTextFilterEnabled(true);

        mList.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String description = ((TextView) view).getText().toString();
                final EditText etDesc = (EditText) findViewById(R.id.EditDescription);

                etDesc.setText(description);
                mList.setVisibility(2);
            }
        });
    }
}   

【问题讨论】:

    标签: android listview visibility


    【解决方案1】:

    嗯,我不知道你想要完成什么。 您可以通过创建包含列表的Dialog 来解决此问题,并且您可以在他们按下项目后立即关闭Dialog,或者您可以使用“确定”按钮来完成。

    您还可以将activity 分成两部分,每当从列表中选择项目时,您完成activity 并返回到之前的activity

    另一种解决方案是,一旦选择了该项目,然后您执行mList.setVisibility(View.Gone)(或View.Invisible,具体取决于您要完成的任务)。

    这些解决方案中的任何一个都可以工作,您必须决定哪种方案最适合您的应用逻辑。 希望对你有帮助

    【讨论】:

    • 感谢 Raukodraug。在这一点上,我只是在寻找使现有 ListView 不可见的最佳方法……我缺少的是 (View.GONE)。非常感谢!最后,我可能会将其转换为对话框。
    • @ctgScott np,我很高兴它有帮助:)
    • 我的错误......在继续测试后我意识到用户可能会选择第二次执行搜索,这需要我将 ListView 及其内容设置回可见。我现在尝试设置:mList.setAdapter(null);在用户做出选择之后,这似乎可以根据需要工作......有什么想法吗?
    • mList.setVisibility(View.Visible) 怎么样?为什么将适配器设置为 null?
    • 为了重用搜索功能并将新列表提供给用户,我做了 setVisibility(View.VISIBLE)。但是,在执行/完成新搜索之前,我放置该行代码的位置返回到可见的所有先前列表内容。当然,这是我的错误……但这让我想到……也许最好立即将适配器设置为 null 并让适配器保持可见但为空。然后在新的搜索(如果实际调用了一个)后重新填充它,而不是设置不可见 - 执行搜索 - 设置可见。我不知道哪个更有效......只是一个猜测。
    猜你喜欢
    • 2011-01-18
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多