Android自定义适配器-ArrayAdapter要求资源ID为Textview错误

Android自定义适配器-ArrayAdapter要求资源ID为Textview错误,android,android-listview,android-adapter,Android,Android Listview,Android Adapter,我创建了一个自定义适配器,以便为我的列表项提供标题、说明和图像,但它不断抛出以下内容: java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 我理解如果我使用标准的Android适配器,为什么会出现这种情况,但我认为通过制作自己的适配器,您可以避免这种情况。有什么我遗漏的吗 以下是我的适配器类: package homepage; import android.conte

我创建了一个自定义适配器,以便为我的列表项提供标题、说明和图像,但它不断抛出以下内容:

java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
我理解如果我使用标准的Android适配器,为什么会出现这种情况,但我认为通过制作自己的适配器,您可以避免这种情况。有什么我遗漏的吗

以下是我的适配器类:

package homepage;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class Adapter_Homepage extends BaseAdapter {
    private final Context context;
    private final ArrayList<String> titles;
    private final ArrayList<String> descriptions;

    static class ViewHolder {
        public TextView title, description;
        public ImageView image;
    }

    public Adapter_Homepage(Context context, ArrayList<String> titles, ArrayList<String> descriptions) {
        this.context = context;
        this.titles = titles;
        this.descriptions = descriptions;
    }


    public String getItemTitle(int position) {
        return titles.get(position);
    }

    public String getItemDescription(int position) {
        return descriptions.get(position);
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

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

        View rowView = convertView;
        ViewHolder holder;

        if (rowView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.home_activity_item, null);
            // configure view holder
            holder = new ViewHolder();
            holder.title = (TextView) rowView.findViewById(R.id.firstLine);
            holder.description = (TextView) rowView.findViewById(R.id.secondLine);
            holder.image = (ImageView) rowView.findViewById(R.id.icon);
            rowView.setTag(holder);
        }
        else {
            holder = (ViewHolder) rowView.getTag();
        }

        holder.title.setText(getItemTitle(position));
        holder.description.setText(getItemDescription(position));
        holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.icon));
        return rowView;
    }
}
package主页;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.TextView;
导入java.util.ArrayList;
公共类适配器\u主页扩展了BaseAdapter{
私人最终语境;
私人最终ArrayList标题;
私有最终数组列表描述;
静态类视窗夹{
公共文本视图标题、说明;
公众形象;
}
公共适配器_主页(上下文上下文、ArrayList标题、ArrayList说明){
this.context=上下文;
this.titles=标题;
this.descriptions=描述;
}
公共字符串getItemTitle(int位置){
返回标题。获取(位置);
}
公共字符串getItemDescription(int位置){
返回说明。获取(位置);
}
@凌驾
public int getCount(){
返回0;
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行视图=转换视图;
视窗座;
if(rowView==null){
LayoutFlater充气器=(LayoutFlater)context.getApplicationContext().getSystemService(context.LAYOUT\u充气器\u服务);
rowView=充气机。充气(R.layout.home\u活动\u项,空);
//配置视图保持架
holder=新的ViewHolder();
holder.title=(TextView)rowView.findViewById(R.id.firstLine);
holder.description=(TextView)rowView.findViewById(R.id.secondLine);
holder.image=(ImageView)rowView.findviewbyd(R.id.icon);
rowView.setTag(支架);
}
否则{
holder=(ViewHolder)rowView.getTag();
}
holder.title.setText(getItemTitle(position));
holder.description.setText(getItemDescription(position));
setImageDrawable(context.getResources().getDrawable(R.drawable.icon));
返回行视图;
}
}
这是我的活动课:

public class Activity_Homepage extends Activity {

private ListView listview;
private Adapter_Homepage adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_activity_listview);

    listview = (ListView) findViewById(R.id.listview);

    ArrayList<String> titles = new ArrayList<String>();
    titles.add("Aaron Rodgers");
    titles.add("Jordy Nelson");

    ArrayList<String> descriptions = new ArrayList<String>();
    descriptions.add("Quarterback");
    descriptions.add("Wide Receiver");

    adapter = new Adapter_Homepage(this, titles, descriptions);
    listview.setAdapter(adapter);
    listview.setOnItemClickListener(global_OnItemClickListener);


}

final AdapterView.OnItemClickListener global_OnItemClickListener = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    }
};

}
公共课堂活动\u主页扩展活动{
私有列表视图列表视图;
专用适配器\主页适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.home\u activity\u listview);
listview=(listview)findViewById(R.id.listview);
ArrayList titles=新的ArrayList();
标题。添加(“亚伦·罗杰斯”);
标题。添加(“Jordy Nelson”);
ArrayList descriptions=新的ArrayList();
说明。添加(“四分卫”);
说明。添加(“宽接收器”);
adapter=新的adapter_主页(此、标题、说明);
setAdapter(适配器);
setOnItemClickListener(全局_OnItemClickListener);
}
最终AdapterView.OnItemClickListener全局_OnItemClickListener=新AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
}
};
}

似乎您使用的是
阵列适配器
而不是自定义实现,并且您没有提供
文本视图
id


此外,还需要确保在
BaseAdapter
方法上返回正确的值。在
getCount()
上返回
0
和在
getItem()
上返回
null
将使应用程序崩溃。

我在我的主活动类中编辑过。它似乎正在使用我的自定义适配器,因此提供textview id应该无关紧要。请发布stacktrace。更改返回值似乎可以修复异常,但是现在只显示描述textview。