【问题标题】:How to show/hide Activity views from a ListFragment如何从 ListFragment 显示/隐藏 Activity 视图
【发布时间】:2012-04-28 15:06:24
【问题描述】:

我有经典的ListActivity - ListFragment 设计,ListFragment 通过游标加载器获取数据。

基本安排有两种可能的结果-

光标为空或有数据。

list_row.xml 使用数据填充数据库中的项目。

如果为空,我会看到一个空白屏幕,其中没有用户信息。

我已经设置了一个TextView <i>"No records found message"</i>,它可以在 ListFragment 中设置为可见或不可见。问题是:

  1. ListFragment 无法访问 ListActivity 上的视图。
  2. 如何从 ListFragment 调用以下 ListActivity 方法?
公共无效更新视图(布尔数据){ 如果(数据){ noRecordsFound.setVisibility(View.GONE); } 别的 { noRecordsFound.setVisibility(View.VISIBLE); } }

我曾尝试从ListFragmentonLoadFinished 访问,但这无法访问。有什么帮助吗?

【问题讨论】:

  • 我不太明白你的第一个问题,因为视图应该是片段布局的一部分,而不是活动的,对吧?关于切换“空”消息:为什么不简单地使用ListView 的内置setEmptyView(...)ListFragment 功能的setEmptyText(...)?第一个允许您为空消息显示更复杂的视图层次结构,以备不时之需。
  • 感谢一百万!结果比我想象的要简单得多。我使用了ListFragmentsetEmptyText(...) 并且效果很好!
  • 很高兴听到。我还添加了评论作为答案,因此您可以接受它并帮助其他可能因类似问题而遇到此线程的人。

标签: android listactivity


【解决方案1】:

感谢 MH 提供的替代方法,但我已经找到了自己问题的答案。虽然我认为 MH 的答案最适合我的情况,但我提供了一个我最初想做的解决方案,以防有人需要将它用于列表视图以外的事情。

好吧,我在游标加载器的onLoadFinished() 中包含了if (cursor.getCount() < 1) 块,所以:

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

    if (cursor.getCount() < 1) {

        TextView noNotes    = (TextView) getActivity().findViewById(R.id.noNotes);
        noNotes.setVisibility(View.GONE);
    }
    adapter.swapCursor(cursor);
}

【讨论】:

    【解决方案2】:

    根据之前的评论:

    我不太了解您的第一个问题,因为视图应该是片段布局的一部分,而不是活动的,对吗?

    关于切换“空”消息:为什么不简单地使用ListViewsetEmptyView(...)ListFragmentsetEmptyText(...) 的内置功能(也可在支持库中获得)?第一个允许您为空消息显示更复杂的视图层次结构,以备不时之需

    【讨论】:

    • 我在问题的第一部分的意思是我无法从ListFragment class 调用在ListActivity class 上声明的方法。例如。因此调用getActivity().callMethod(params) 会出错。
    • 啊,现在我明白你的意思了。为了使其工作,您必须将getActivity() 的结果转换为您的特定实现,例如:((MyActivity)getActivity).callMethod(params)。然而,更好、更通用的方法是使用侦听器接口并将活动注册为片段的侦听器。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    相关资源
    最近更新 更多