2015-07-05 2 views
1

TargetAndroid ArrayAdapter Сбои, когда я хочу, чтобы загрузить ListView

Я пытаюсь создать список покупок в Android. У этого есть один класс активности (MainActivity.java) и один макет (activity_main.xml) Эта программа имеет edittext для добавления элементов и список для элементов списка покупок.

Я использую genymotion для запуска программы mt. Когда я запускаю эту программу, она полностью падает.

Структура

Мой макет activity_main.xml класс:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <EditText 
     android:id="@+id/newItemText" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/addItemHint" 
     android:contentDescription="@string/addItemContentDescription" 
     /> 

    <ListView 
     android:id="@+id/shoppingListView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"></ListView> 

</LinearLayout> 

Это OnCreate метод в моем классе MainActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Inflating the view 
     setContentView(R.layout.activity_main); 

     //References from the UI widgets 
     ListView shoppingListView = (ListView) findViewById(R.id.shoppingListView); 
     final EditText newShoppingItemText = (EditText) findViewById(R.id.newItemText); 

     //the list of shopping items 
     final ArrayList<String> shoppingListItems = new ArrayList<String>(); 
     shoppingListItems.add("Eggs"); 
     shoppingListItems.add("Bacon"); 
     //the array adapter, which binds the shopping list items array to the listview 
     final ArrayAdapter<String> aa; 
     aa = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_main,shoppingListItems); 

     //Bind the adapter to the listview 
     shoppingListView.setAdapter(aa); 

     newShoppingItemText.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if(event.getAction() == KeyEvent.ACTION_DOWN) 
        if((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) { 
         shoppingListItems.add(0, newShoppingItemText.getText().toString()); 
         aa.notifyDataSetChanged(); 
         newShoppingItemText.setText(""); 
         return true; 
        } 
         return false; 
      } 
     }); 
    } 

Проблема

Когда я запускаю этот код в Genymotion я получаю следующий вывод ошибок в моем LogCat:

процесса: com.example.jonas.shoppinglist, PID: 8354 java.lang.IllegalStateException: ArrayAdapter требует идентификатор ресурса для быть TextView на android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:386) на android.widget.ArrayAdapter.getView (ArrayAdapter.java:362) на android.widget.AbsListView.obtainView (AbsListView.java:2255) на android.widget.ListView.measureHeightOfChildren (ListView.java:1263) на android.widget.ListView.onMeasure (ListView.java:1175) at android.view.View.measure (View.java:16497)

ответ

1

Проблема в этой строке кода

aa = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_main,shoppingListItems); 

Вы косяк проход расположение YOUT деятельности в качестве расположения одного элемента в ListView. Попробуйте вместо этого:

aa = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,shoppingListItems);

+0

Это сделало эту работу, спасибо человеку – Jonas

0

Эта строка неверна:

aa = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_main,shoppingListItems);

Конструктор вы вызываете это:

http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter%28android.content.Context,%20int,%20java.util.List%3CT%3E%29

И вы передаете его деятельность макет, где вы должны передать ему макет для определенных элементов в l ист.