0

我有一个片段,其中 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
            }
        }
    } 
4

2 回答 2

1

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

于 2013-10-20T00:38:07.593 回答
0

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

于 2013-10-20T22:18:10.727 回答