2

私は Android がまったく初めてで、Fragments を初めて試しています。フラグメントで変換している ListView アクティビティを使用しました。しかし、どういうわけか、findViewById() によって取得された ListView 要素が私に null を与えています。誰でもこれについて私を助けてもらえますか?

これがListView Fragmentのコードで、setAdapterメソッドを呼び出した後にエラーが発生します。ログ値に timeTrackerListView が null として表示されます。理由がわかりません。:(

 package ray.kaushik.nasaapp;

import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

public class TimeTracker extends Fragment{
    private Time_Tracker_Adapter timeTrackerAdapter;
    private String TAG = "TimeTracker";
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        timeTrackerAdapter = new Time_Tracker_Adapter();

    }

    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){
            return inflater.inflate(R.layout.time__tracker_layout, container, false);
    }

    public void onActivityCreated(Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);
        ListView timeTrackerListView = (ListView) getActivity().findViewById(R.id.time_tracker_List);
        Log.i(TAG, "timeTrackerListView-->" + timeTrackerListView);
        timeTrackerListView.setAdapter(timeTrackerAdapter);
    }
}
4

2 に答える 2

3

onCreate()の前に呼び出されonCreateView()ます。ListView はまだ膨張していないため、見つけることができません...

onCreate()現在のコードをonCreateView()またはに移動するだけonActivityCreated()です。


onCreateView()膨張したビューへの参照を保存することで、ほとんど問題なくListView をセットアップできるはずです。

public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.time__tracker_layout, container, false);
    ListView timeTrackerListView = (ListView) view.findViewById(R.id.time_tracker_List);
    timeTrackerAdapter = new Time_Tracker_Adapter();
    timeTrackerListView.setAdapter(timeTrackerAdapter);
    return view;
}

開発者ガイドの図:

フラグメントのライフサイクル

于 2012-10-14T16:20:35.357 に答える
2

あなたの問題は、ビューを設定する前にリストビューを取得しようとしていることです(onCreate前に呼び出されonCreateViewます)...これを移動する必要があります

ListView timeTrackerListView = (ListView) getActivity().findViewById(R.id.time_tracker_List); 

メソッドを参照するものすべてonCreateView

于 2012-10-14T16:23:09.207 に答える