Фрагмент BaseAdapter возвращает исключение NullPointerException - PullRequest
0 голосов
/ 01 марта 2019

Мое приложение состоит из двух Fragments, которые должны получать информацию от MainActivityMainActivity данные загружаются и помещаются в ArrayLists, затем они должны быть представлены в первом Fragment.Поэтому я создал метод, который передает ArrayLists первому Fragment.

Проблема, с которой я столкнулся, заключается в том, что я получаю NullPointerException на линии mContactsAdapter = new SimpleAdapter(...) в моем классе Fragment.Но я не понимаю, почему это так, поскольку я настроил Adapter в методе onCreateView.Это неправильно настроено?

My MainActivity:

public class MainActivity extends AppCompatActivity {

    ArrayList<HashMap<String, String>> contactList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        contactList = new ArrayList<>();

    }

    public void FillAndPresent() {

        /***
         * fill ArrayLists
         * ...
         */

        CallsFragment fragment = new CallsFragment();
        ((CallsFragment) fragment).show(contactList);

    }

}

Мой класс фрагмента:

public class CallsFragment extends Fragment{

    private BaseAdapter mContactsAdapter;
    private final List<HashMap<String, String>> mContactsListItems = new ArrayList<>();

    public CallsFragment() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_calls, container, false);


        ((ListView) view.findViewById(R.id.list))
                .setAdapter(mContactsAdapter);

        return view;
    }


    public void show(ArrayList c){

        mContactsAdapter = new SimpleAdapter(
                getActivity(), mContactsListItems,
                R.layout.list_item, new String[]{"price", "brand",
                "dist"}, new int[]{R.id.price,
                R.id.brand, R.id.dist});

        mContactsListItems.addAll(c);
        mContactsAdapter.notifyDataSetChanged();

        ((ListView) getActivity().findViewById(R.id.list))
                .setAdapter(mContactsAdapter);
    }

}

1 Ответ

0 голосов
/ 02 марта 2019

Как сказал @ 0x0nosugar

Это происходит из-за того, что фрагмент еще не присоединен к действию "

попробуйте это

CallsFragment fragment = new CallsFragment();
fragment.show(contactList);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.mainActivity,fragment);
// >> here you replace the main activity layout with your fragment by put the id of it.

fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

Подробнее о фрагменте здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...