1

我有一个管理片段列表的活动。其中之一是 ListFragment,当活动在 Create() 期间尝试找到它时,我得到一个 Null 异常。

Caused by: java.lang.NullPointerException
at com.example.foodexp01b.MainActivity.onCreate(MainActivity.java:154)

ListFragment 尚未创建,但我需要像其他人一样将它放入片段数组中。我该怎么办?

活动

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        uiHelper = new UiLifecycleHelper(this, callback);
        uiHelper.onCreate(savedInstanceState);

        FragmentManager fm = getSupportFragmentManager();
        fragments[LOGIN] = fm.findFragmentById(R.id.loginFragment);
        fragments[HOME] = fm.findFragmentById(R.id.homeFragment);
        fragments[SETTINGS] = fm.findFragmentById(R.id.settingsFragment);
        fragments[SETTINGS].getView().findViewById(R.id.back_button1)
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                currentFragment = HOME;
                showFragment(HOME, false);
            }
        });
        fragments[DESTINATIONS] = fm.findFragmentById(R.id.destinationFragment);
        fragments[DESTINATIONS].getView().findViewById(R.id.back_button2)
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                currentFragment = HOME;
                showFragment(HOME, false);
            }
        });
        fragments[MAP] = fm.findFragmentById(R.id.mapFragment);
        fragments[RESTAURANT] = fm.findFragmentById(R.id.restaurantFragment);
        fragments[RESTAURANT].getView().findViewById(R.id.restaurant_back_button)
        .setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                currentFragment = MAP;
                showFragment(MAP, false);
            }
        });
        fragments[FAVORITES].getView().findViewById(R.id.favoritesFragment);
        FragmentTransaction transaction = fm.beginTransaction();
        for(int i = 0; i < fragments.length; i++) {
            transaction.hide(fragments[i]);
        }
        transaction.commit();
    }

ListFragment 代码

public class FavoritesFragment extends ListFragment{

    private ListView listView;
    private List<BaseListElement> listElements;

    OnFavoritesFragmentListener mCallback;

    ArrayList<String> favorites;

    // Container Activity must implement this interface
    public interface OnFavoritesFragmentListener {
        public void onSearchSelected();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnFavoritesFragmentListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFavoritesFragmentListener");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        favorites = new ArrayList<String>();
        setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, favorites));
    }
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        //do something
    }
}

编辑

活动.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.foodexp01b.HomeFragment"
          android:id="@+id/homeFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
    <fragment android:name="com.example.foodexp01b.LoginFragment"
          android:id="@+id/loginFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
    <fragment android:name="com.example.foodexp01b.SettingsFragment"
          android:id="@+id/settingsFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

    <fragment android:name="com.example.foodexp01b.DestinationFragment"
          android:id="@+id/destinationFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />
    <fragment
          android:id="@+id/mapFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.SupportMapFragment"/>

    <fragment android:name="com.example.foodexp01b.RestaurantFragment"
          android:id="@+id/restaurantFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

    <fragment android:name="com.example.foodexp01b.FavoritesFragment"
          android:id="@+id/favoritesFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

</LinearLayout>
4

1 回答 1

2

你不见了fragments[FAVORITES] = fm.findFragmentById(R.id.favoritesFragment)

于 2013-06-30T19:30:52.353 回答