2015-12-01 2 views
1

Я работаю над этим некоторое время и не могу понять, почему я получаю несколько ошибок. Любая помощь будет принята с благодарностью. - Я создал класс и взятые строки из папки общих настроек и назначил их членам данных в классе. - Я создал пользовательский adpater, чтобы назначить эти элементы в listview с использованием линейных макетов и двух texviews в каждом макете. . Я получаю ошибку об идентификаторе, а также ошибку о невозможности использовать макет в качестве TextViewArrayAdapter требует, чтобы идентификатор ресурса был текстовым в списке. Android Studio

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 
+1

извините за плохое формирование. Это мой первый пост. –

+0

опубликуйте свой xml, а также ваш полный логарифм – Anjali

ответ

0
return view; 

вместо

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

В самом представлении есть 2 объекта (два элемента), которые будут отображаться на ресурсе, однако super.getView возвращает только один. Другими словами, количество элементов, которые будет отображаться ресурсом, должно равняться количеству элементов в отображаемом представлении.

+1

Расширение на то, почему это помогает/работает полезно – Holloway

+0

@Holloway, потому что у самого представления должно быть 2 элемента (двойные элементы), которые будут отображаться в ресурсе ... другими словами, номер элементов, которые будет отображаться ресурсом, должен равняться количеству элементов в представлении, которое должно отображаться. – msoliman

+0

@msoliman Спасибо, я добавил, что для ответа, пожалуйста, проверьте правильность. – Holloway

Смежные вопросы