Android: Выдает ошибку для отображения ListView кастомного

Выдает ошибку для отображения ListView кастомного...

 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.usingbymyself.recycler, PID: 19399
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
        at com.usingbymyself.recycler.MenuElementAdapter.getView(MenuElementAdapter.java:33)
        at android.widget.AbsListView.obtainView(AbsListView.java:2387)
        at android.widget.ListView.makeAndAddView(ListView.java:1970)
        at android.widget.ListView.fillDown(ListView.java:704)
        at android.widget.ListView.fillFromTop(ListView.java:765)
        at android.widget.ListView.layoutChildren(ListView.java:1744)
        at android.widget.AbsListView.onLayout(AbsListView.java:2176)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:446)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:730)
        at android.view.View.layout(View.java:17666)
        at android.view.ViewGroup.layout(ViewGroup.java:5577)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2390)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2112)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1298)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6437)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:876)
        at android.view.Choreographer.doCallbacks(Choreographer.java:688)
        at android.view.Choreographer.doFrame(Choreographer.java:623)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:862)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6238)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

Вот класс адаптера:

 public class MenuElementAdapter extends ArrayAdapter<MenuElement> {
    private LayoutInflater inflater;
    private int layout;
    private ArrayList<MenuElement> menuElememtlist;

    MenuElementAdapter(Context context, int resource, ArrayList<MenuElement> menuElementList) {
        super(context, resource, menuElementList);
        this.menuElememtlist = menuElementList;
        this.layout = resource;
        this.inflater = LayoutInflater.from(context);
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        View view=inflater.inflate(this.layout, parent, false);

        ImageView iconImage = (ImageView)view.findViewById(R.id.imageView_iconMainMenu);
        Button button = (Button)view.findViewById(R.id.button_menuTitle);
        MenuElement menuElement=menuElememtlist.get(position);

        iconImage.setImageResource(menuElement.getIconResource());
        button.setText(menuElement.getElementName());

        return view;
    }


    }

вот мэйн активити

    public class MainActivity extends AppCompatActivity {

    ArrayList<MenuElement> menuElements;
    private ListView listViewMenu;

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

        listViewMenu = findViewById(R.id.list_menu);
        menuElements = new ArrayList<>();
        menuElements.add(new MenuElement(R.drawable.fif,"Ljslr"));
        MenuElementAdapter adapter = new MenuElementAdapter(this, android.R.layout.simple_expandable_list_item_1, menuElements);
listViewMenu.setAdapter(adapter);
    }
}

Ответы (1 шт):

Автор решения: pavlofff

Ресурс разметки

android.R.layout.simple_expandable_list_item_1

из дефолтных ресурсов андроид, который вы пытаетесь использовать в качестве разметки вашего айтема списка не содержит других виджетов, кроме TextView (то есть его нельзя использовать для отображения картинки) и абсолютно точно не содержит вашего собственного imageView_iconMainMenu, хотя бы потому, что в далеком 2008 году, когда писалась эта разметка, никто в гугл и подумать не мог, что в 2020 некий Ифенкиул захочет найти его там.

Вместо дефолтного ресурса андроид вам нужно сделать собственную разметку для айтема и затем указать именно ее вместо того, что у вас сейчас.

→ Ссылка