【问题标题】:Can't update ListView after rotate with changing layout通过更改布局旋转后无法更新 ListView
【发布时间】:2013-10-21 06:18:10
【问题描述】:

我有一个片段,其中 ListView 和 ArrayAdapter 作为自定义片段类中的全局变量。我还有一个函数应该更新这个列表,使附加的文本字段可见或不可见。因此,如果我在从活动旋转(更改为特殊土地布局)后调用列表更新函数,我发现 ListView 和 ArrayAdapter 对象为空。因此我无法更新我的列表。我应该怎么办?谢谢各位。

    private View fragmentView;
    private SimpleListNewsAdapter adapterNews;
    private ListView listNews;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        fragmentView = inflater.inflate(getLayoutId(), container, false);
        listNews = (ListView) fragmentView.findViewById(R.id.newsList); 
        adapterNews = new SimpleListNewsAdapter(fragmentView.getContext(), R.id.newsList);
        listNews.setAdapter(adapterNews);
        …
        return fragmentView;
    }

    public void showListExpanded(Boolean expanded){
        if (isShowDesc != expanded){
            isShowDesc = expanded;

            if (adapterNews != null && listNews != null){
                adapterNews.notifyDataSetChanged();             
                listNews.refreshDrawableState();
                listNews.invalidateViews();
                listNews.setAdapter(adapterNews);

            } else {
                // Here I should do something to refresh my list
            }
        }
    } 

【问题讨论】:

    标签: android android-listview android-fragments


    【解决方案1】:

    当您旋转设备时(如果您没有在清单中声明 android:configChanges="orientation"),您的活动将被重新创建。我猜您没有在 onCreate 方法上正确初始化您的 listView 和适配器(可能是您正在等待用户交互,例如单击按钮)。 如果您分享您的完整代码,您可以获得答案:)

    【讨论】:

    • 我在 onCreateView 方法中初始化我的列表。可能我应该在 onCreate 中这样做吗?
    • 我认为这不会解决您的问题。如果您首先旋转您的设备,则您的活动的 onCreate 方法将被调用您的片段的 onCreateView 方法。
    • 我不知道你有什么样的逻辑。但是,如果您尝试在活动的 onCreate 或片段的 onCreateView 方法上初始化列表的数据,则应该可以使用。发布您的代码,我会尽力提供帮助;)
    • 我已经发布了 essentian 代码猜测。当用户选择相应的菜单项时,我从活动中调用showListExpanded 函数。就是这样。
    • 您确定您的adapterNews 或listNews 为空吗?正如我从您发布的代码和您的 cmets 中看到的那样,它们不应为空。可能是您的 if (isShowDesc != expand) 返回 false?
    【解决方案2】:

    我的错误是在活动中从FragmentPagerAdapter.getItem 创建一个新的空片段对象,然后调用showListExpanded。我通过在创建原始片段时记账链接来解决这个问题。我用过这个good example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多