Приложение закрывается в строке linearLayout removeAllViews внутри фрагмента: Android

Я новичок в разработке Android. Я перенес код из моей MainActivity в класс Fragment. В моем методе onCreateView я вызываю метод viewFunds() для динамического отображения данных из SQLite.

Однако когда я щелкаю вкладку для этого фрагмента, приложение закрывается, когда оно достигает строки removeAllViews. Мне нужно сначала удалить AllViews каждый раз, когда этот метод вызывается для обновления данных.

Поскольку я вызываю ViewFunds() и в других методах, например, при удалении данных, я вызываю его, чтобы обновить результаты на экране.

Смотрите код ниже:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootview = inflater.inflate(R.layout.activity_settings_tab, container, false);
        super.onCreate(savedInstanceState);
        myDb = new DatabaseHelper(getContext());


        btnAddData = (Button) rootview.findViewById(R.id.button_add);
        btnviewAll = (Button) rootview.findViewById(R.id.button_viewAll);
        btnAddFund = (Button) rootview.findViewById(R.id.button_AddFund);
        btnviewUpdate = (Button) rootview.findViewById(R.id.button_update);
        editEmergencyFund = (EditText) rootview.findViewById(R.id.edit_EmergencyFund);
        editProsperityFund = (EditText) rootview.findViewById(R.id.edit_ProsperityFund);
        editRewardFund = (EditText) rootview.findViewById(R.id.edit_RewardFund);

        viewAll(); //this is for a button
        viewFunds();//this is executed when the fragment is called


        return inflater.inflate(R.layout.activity_settings_tab, container, false);
    }


public void viewFunds() { 
        Cursor res2 = myDb.getConfigData();
        res2.moveToFirst();


        final View linearLayout = getActivity().findViewById(R.id.ll_config);
        ((LinearLayout) linearLayout.getParent()).removeAllViews(); //clear layout first - LINE WITH ISSUE
        ((LinearLayout) linearLayout.getParent()).setGravity(Gravity.CENTER);

 //some code follows...

 }

Последняя строка в этой группе кода, которая пишется после строки removeAllViews, также приводит к закрытию приложения:

 LinearLayout llh = new LinearLayout(getActivity());
            llh.setOrientation(LinearLayout.HORIZONTAL);
            LinearLayout.LayoutParams lp_llh = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            llh.setLayoutParams(lp_llh);

            ((LinearLayout) linearLayout.getParent()).addView(llh); //code  that causes app to close

Заранее спасибо за помощь.

2 ответа

Я предполагаю что ((LinearLayout) linearLayout.getParent()).removeAllViews() удаляет linearLayout также. Попробуйте сделать это:

...
ViewParent parent = linearLayout.getParent();
parent.removeAllViews();
parent.setGravity(Gravity.CENTER);
...
parent.addView(llh);
...

Здесь вы возвращаетесь новым View что вы только что создали в конце onCreateView:

return inflater.inflate(R.layout.activity_settings_tab, container, false);

С возвращением нового View не из Views у вас есть действительная ссылка, и это вызывает NPE. Измените это на:

return rootView;
Другие вопросы по тегам