Проблема с закрытием навигационного ящика при нажатии на пункт меню Expendable

У меня возникает проблема, когда я пытаюсь закрыть навигационный ящик методом щелчка по его элементу меню расширяемого списка.

Вот метод расширяемого меню просмотра списка навигационного ящика, где заголовок меню привязывается, а в элементе подменю щелкает новый MainActivity(). closeDrawer() вызывается и выдает ошибку.

 @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    final String childData = (String) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this.mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_submenu, null);
    }

    String[] str = childData.split("@");

    final TextView txtListChildTitle = convertView.findViewById(R.id.submenu);

    txtListChildTitle.setText(str[0]);
    txtListChildTitle.setTag(str[1]);

    txtListChildTitle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            new MainActivity().closeDrawer();
            String tag = txtListChildTitle.getTag().toString();
            Intent i2 = new Intent(mContext, AllSubCategory.class);
            i2.putExtra("ID", tag);
            mContext.startActivity(i2);
        }
    });

    return convertView;
}

вот ошибка

2019-09-20 11:53:27.037 7717-7717/com.techabilit.readerchoice E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.techabilit.readerchoice, PID: 7717
java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.drawerlayout.widget.DrawerLayout.closeDrawer(int)' on a null object reference
    at com.techabilit.readerchoice.Activities.MainActivity.closeDrawer(MainActivity.java:821)

и вот метод закрытия ящика в MainActivity.java:821

public void closeDrawer() {

    drawer.closeDrawer(GravityCompat.START);

}

пожалуйста, помогите мне закрыть ящик с помощью onClick подпункта меню навигации.


person Rahul Pathak    schedule 20.09.2019    source источник
comment
Следуйте этому stackoverflow.com/questions/45878902/   -  person Krunal Dave    schedule 20.09.2019


Ответы (2)


Проблема здесь.

new MainActivity().closeDrawer();

Заменить

((MainActivity)mContext).closeDrawer();

Вы создаете новый экземпляр MainActivity каждый раз, когда нажимаете на элемент. Вместо этого вы можете преобразовать mContext в MainActivity и вызвать closeDrawer().

person Jaymin    schedule 20.09.2019
comment
@RahulPathak, если проблема решена, отметьте ее как принятую. Так, что это может быть полезно для других. - person Jaymin; 20.09.2019

new mainActivity() создаст другой экземпляр класса, который не совпадает с экземпляром, с которым вы работаете, поэтому попробуйте один раз, попробуйте context.closeDrawer();

person Awa93    schedule 20.09.2019