0

カスタムフラグメントクラスのグローバル変数として ListView と ArrayAdapter を持つフラグメントがあります。このリストを更新して、追加のテキスト フィールドを表示または非表示にする関数もあります。そのため、アクティビティからローテーション (特殊なランド レイアウトに変更) した後にリスト更新関数を呼び出すと、ListView オブジェクトと ArrayAdapter オブジェクトが null であることがわかりました。したがって、リストを更新できません。私は何をすべきか?Thnxみんな。

    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 に答える