ArrayAdapter 要求资源 ID 是列表视图中的文本视图 Android Studio

ArrayAdapter requires the resource id to be a textview in listview Android Studio

我已经为此工作了一段时间,但无法真正弄清楚为什么我会收到多个错误。任何帮助将不胜感激。 - 我创建了一个 class 并从共享首选项文件夹中获取字符串并将它们分配给 class 中的数据成员。 - 我制作了一个自定义适配器,以便使用线性布局将这些项目分配到列表视图中,每个布局中有两个 texview - 我收到有关 ID 的错误以及有关无法将布局转换为文本视图的错误

public class MainActivity extends AppCompatActivity {

private static final String GROCERIES = "items";

private EditText itemEditText;
private SharedPreferences savedItems;
private ArrayList<String> ITEMS;
private ArrayList<String> People;
private ArrayList<CustomObject> objectList;
private ArrayAdapter<CustomObject>  adapter;
private TextView anchor;

//private ListView christList;


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

    ListView christList =(ListView) findViewById(R.id.listView);

    savedItems = getSharedPreferences("items", MODE_PRIVATE);



    People = new ArrayList<String>(savedItems.getAll().keySet());
    Collections.sort(People, String.CASE_INSENSITIVE_ORDER);

    objectList = new ArrayList<CustomObject>();

    for (int i = 0; i < People.size();  i++){
        String PersonName = People.get(i);

        ITEMS =new ArrayList<String>( Arrays.asList(getItemList(this, PersonName)));

        for (int j = 0; j < ITEMS.size(); j++){
            CustomObject newObject = new CustomObject(ITEMS.get(j), PersonName);
            objectList.add(newObject);
        }

    }


    adapter = new ChristmasAdapter(this, R.layout.dual_list_item,R.id.item_name,R.id.family_member, objectList);
    christList.setAdapter(adapter);

   /* adapter = new ArrayAdapter<String>(this, R.layout.list_item, ITEMS);
    christList.setAdapter(adapter);

    adapter.notifyDataSetChanged();
   */

    ImageButton addButton =
            (ImageButton) findViewById(R.id.add_button);
    addButton.setOnClickListener(addButtonListener);

    //christList.setOnItemClickListener(itemClickListener);

   // christList.setOnItemLongClickListener(itemLongClickListener);
}

public static String[] getItemList(Activity activity,String Key){
    String ItemsList = getStringsFromPreferences(activity, null, Key);
    return convertStringToArray(ItemsList);
}

private static String getStringsFromPreferences(Activity activity, String nick, String key){
    SharedPreferences sharedPreferences = activity.getPreferences(Activity.MODE_PRIVATE);
    String temp = sharedPreferences.getString(key, "");
    return temp;
}

private static String[] convertStringToArray(String str){
 String[] arr = str.split(",");
    return arr;
}

public void sendMessage(View view){
    Intent intent = new Intent(this,Main2Activity.class);
    startActivity(intent);
}

public class CustomObject {

    private String Item;
    private String FamilyMem;

    public CustomObject(String prop1, String prop2) {
        this.Item = prop1;
        this.FamilyMem = prop2;
    }

    public String getItem1() {
        return Item ;
    }

    public String getFamilyMem() {
        return FamilyMem;
    }
};


class ChristmasAdapter extends ArrayAdapter <CustomObject>{

    private LayoutInflater layoutinflater;

    public ChristmasAdapter(Context context, int id, int itemId,
                            int famId,
                            ArrayList<CustomObject> objects){
        super(context, id, objects);
        layoutinflater = LayoutInflater.from(context);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View view = layoutinflater.inflate(R.layout.dual_list_item, null);
        CustomObject newItem = getItem(position);

        TextView Item =(TextView) view.findViewById(R.id.item_name);
        TextView Fam = (TextView) view.findViewById(R.id.family_member);

        Item.setText(newItem.getItem1());
        Fam.setText(newItem.getFamilyMem());


        return super.getView(position,convertView,parent);
    }

}

例外情况是:

java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)

Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView
return view;

而不是

return super.getView(position,convertView,parent);

视图本身有 2 个项目(双项目)要显示在资源中,但是 super.getView 只返回一个。换句话说,资源要显示的项目数应该等于视图中要显示的项目数。