Android 自定义适配器和ListView崩溃
我创建了一个java类,然后想创建一个自定义适配器,最后填充一个列表。我按照指示完成了适配器,但当我运行应用程序时,它不断崩溃。因为我只是一个初学者,我不知道从哪里开始调试过程,所以有人能帮我找到错误吗 我的Java类:Android 自定义适配器和ListView崩溃,android,debugging,android-listview,crash,Android,Debugging,Android Listview,Crash,我创建了一个java类,然后想创建一个自定义适配器,最后填充一个列表。我按照指示完成了适配器,但当我运行应用程序时,它不断崩溃。因为我只是一个初学者,我不知道从哪里开始调试过程,所以有人能帮我找到错误吗 我的Java类: package com.example.android.obgynconference2020; public class MySessions { private int imageResourceId; private String sessionNam
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;
导入android.content.Context;
导入android.support.annotation.NonNull;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.List;
公共类SessionAdapter扩展了ArrayAdapter{
私有上下文;
int mResouce;
公共会话适配器(上下文、int资源、ArrayList对象){
超级(上下文、资源、对象);
}
@非空
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
View listItemView=convertView;
如果(listItemView==null){
listItemView=LayoutInflater.from(getContext()).flate(R.layout.list_项,父项,false);
}
MySessions currentSession=getItem(位置);
ImageView ImageView=(ImageView)listItemView.findViewById(R.id.doctorImage);
setImageResource(currentSession.getImageResourceId());
TextView sessionTextView=(TextView)convertView.findViewById(R.id.sessionTextView);
setText(currentSession.getSessionName());
TextView doctorTextView=(TextView)convertView.findViewById(R.id.doctorTextView);
docortextview.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());
返回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);
}
}
package com.example.android.obgynconference2020;
导入android.se.omapi.Session;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.widget.Adapter;
导入android.widget.ListView;
导入java.util.ArrayList;
公共类DayOneActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list\u视图);
ArrayList sessionList=新建ArrayList();
会话列表。添加(新的MySSessions(R.drawable.ic_启动器背景,“会话一”,“医生一”,“大厅A”,“上午9点-上午10点”);
会话列表。添加(新的MySessions(R.drawable.ic_启动器背景,“会话二”,“医生二”,“大厅B”,“上午9点到10点”);
会话列表。添加(新的MySessions(R.drawable.ic_启动器背景,“会话三”,“医生三”,“大厅C”,“上午9点-上午10点”);
sessionsList.add(新的MySessions(R.drawable.ic_launcher_background,“Session Four”,“Doctor Four”,“Hall A”,“10AM-11AM”);
会话列表。添加(新的MySessions(R.drawable.ic_启动器背景,“会话五”,“医生五”,“大厅B”,“上午10点-上午11点”);
会话列表。添加(新的MySessions(R.drawable.ic_启动器背景,“会话六”,“医生六”,“大厅C”,“上午10点-上午11点”);
sessionsList.add(新的MySessions(R.drawable.ic_启动器_背景,“Session Seven”,“Doctor Seven”,“Hall A”,“上午11点到12点”);
sessionsList.add(新的MySessions(R.drawable.ic_启动器_背景,“Session 8”,“Doctor 8”,“Hall B”,“11AM-12AM”);
会话列表。添加(新的MySessions(R.drawable.ic_启动器背景,“会话九”,“医生九”,“大厅C”,“上午11点到12点”);
会话列表。添加(新的MySessions(R.drawable.ic_启动器背景,“会话十”,“医生十”,“大厅A”,“上午12点-下午1点”);
sessionsList.add(新的MySessions(R.drawable.ic_启动器_背景,“Session 11”,“Doctor 11”,“Hall B”,“12AM-1PM”);
sessionsList.add(新的MySessions(R.drawable.ic_启动器_背景,“第十二次会议”,“第十二位医生”,“C大厅”,“上午12点-下午1点”);
SessionAdapter SessionAdapter=新的SessionAdapter(这个,R.layout.list\u视图,sessionsList);
ListView ListView=(ListView)findViewById(R.id.list);
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>
在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;
}
你能从位于android studio底部的logcat选项卡发布日志吗?