Сбой пользовательского адаптера и ListView - PullRequest
0 голосов
/ 03 октября 2019

Я создал класс Java, затем хотел создать собственный адаптер, чтобы, наконец, заполнить список. Я закончил адаптер в соответствии с инструкциями, но когда я запускаю приложение, оно продолжает падать. Поскольку я только начинающий, я не знаю, с чего начать процесс отладки, поэтому кто-то может помочь мне найти ошибку?

Мой класс Java:

package com.example.android.obgynconference2020;

public class MySessions {

    private int imageResourceId;
    private String sessionName;
    private String doctorName;
    private String hall;
    private String time;


    public MySessions(int imageResourceId, String sessionName, String doctorName,String hall, String time) {
        this.imageResourceId = imageResourceId;
        this.sessionName = sessionName;
        this.doctorName = doctorName;
        this.time = time;
    }

    public String getHall() {
        return hall;
    }

    public void setHall(String hall) {
        this.hall = hall;
    }

    public int getImageResourceId() {
        return imageResourceId;
    }

    public void setImageResourceId(int imageResourceId) {
        this.imageResourceId = imageResourceId;
    }

    public String getSessionName() {
        return sessionName;
    }

    public void setSessionName(String sessionName) {
        this.sessionName = sessionName;
    }

    public String getDoctorName() {
        return doctorName;
    }

    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}

Мой адаптер:

package com.example.android.obgynconference2020;

import android.content.Context;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class SessionAdapter extends ArrayAdapter<MySessions> {

    private Context mContext;
    int mResouce;

    public SessionAdapter(Context context, int resource, ArrayList<MySessions> objects) {
        super(context, resource, objects);
    }


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

        View listItemView = convertView;

        if (listItemView == null) {

            listItemView =LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);

        }

        MySessions currentSession = getItem(position);

        ImageView imageView = (ImageView)listItemView.findViewById(R.id.doctorImage);
        imageView.setImageResource(currentSession.getImageResourceId());

        TextView sessionTextView = (TextView)convertView.findViewById(R.id.sessionTextView);
        sessionTextView.setText(currentSession.getSessionName());

        TextView doctorTextView = (TextView)convertView.findViewById(R.id.doctorTextView);
        doctorTextView.setText(currentSession.getDoctorName());

        TextView hallTextView = (TextView)convertView.findViewById(R.id.hallTextView);
        hallTextView.setText(currentSession.getHall());

        TextView timeTextView = (TextView)convertView.findViewById(R.id.timeTextView);
        timeTextView.setText(currentSession.getTime());

        return listItemView;   
    }
}

Моя деятельность:

package com.example.android.obgynconference2020;

import android.se.omapi.Session;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.ListView;

import java.util.ArrayList;

public class DayOneActivity extends AppCompatActivity {

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

        ArrayList<MySessions> sessionsList = new ArrayList<>();

        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session One", "Doctor One", "Hall A", "9AM - 10AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Two", "Doctor Two", "Hall B", "9AM - 10AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Three", "Doctor Three", "Hall C", "9AM - 10AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Four", "Doctor Four", "Hall A", "10AM - 11AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Five", "Doctor Five", "Hall B", "10AM - 11AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Six", "Doctor Six", "Hall C", "10AM - 11AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Seven", "Doctor Seven", "Hall A", "11AM - 12AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Eight", "Doctor Eight", "Hall B", "11AM - 12AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Nine", "Doctor Nine", "Hall C", "11AM - 12AM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Ten", "Doctor Ten", "Hall A", "12AM - 1PM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Eleven", "Doctor Eleven", "Hall B", "12AM - 1PM"));
        sessionsList.add(new MySessions(R.drawable.ic_launcher_background,"Session Twelve", "Doctor Twelve", "Hall C", "12AM - 1PM"));


        SessionAdapter sessionAdapter = new SessionAdapter(this, R.layout.list_view, sessionsList);

        ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(sessionAdapter);
    }
}

Мой список XML:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/list"/>

Мой список_элементов XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="4"
    android:paddingTop="8dp"
    android:paddingLeft="8dp">

    <ImageView
        android:layout_width="88dp"
        android:layout_height="88dp"
        android:src="@mipmap/ic_launcher"
        android:id="@+id/doctorImage"/>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="88dp"
        android:orientation="vertical"
        android:layout_weight="3"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Session Name"
            android:id="@+id/sessionTextView"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Doctor Name"
            android:id="@+id/doctorTextView"/>   
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="88dp"
        android:orientation="vertical"
        android:layout_weight="1"
        android:gravity="center_horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="88dp"
            android:text="hall"
            android:id="@+id/hallTextView" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Time"
            android:id="@+id/timeTextView" />

    </LinearLayout>

</LinearLayout>

1 Ответ

0 голосов
/ 03 октября 2019

в классе SessionAdapter метод getView заменяет convertView на listItemView

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

    View listItemView = convertView;

    if (listItemView == null) {

        listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);

    }

    MySessions currentSession = getItem(position);


    ImageView imageView = (ImageView)listItemView.findViewById(R.id.doctorImage);
    imageView.setImageResource(currentSession.getImageResourceId());


    TextView sessionTextView = (TextView)listItemView.findViewById(R.id.sessionTextView);
    sessionTextView.setText(currentSession.getSessionName());


    TextView doctorTextView = (TextView)listItemView.findViewById(R.id.doctorTextView);
    doctorTextView.setText(currentSession.getDoctorName());


    TextView hallTextView = (TextView)listItemView.findViewById(R.id.hallTextView);
    hallTextView.setText(currentSession.getHall());


    TextView timeTextView = (TextView)listItemView.findViewById(R.id.timeTextView);
    timeTextView.setText(currentSession.getTime());

    return listItemView;

}
...