2017-01-04 1 views
1

Я пробовал несколько разных макетов, чтобы получить более глубокие возможности и отклонения. Я начал с массива, чтобы отображать элементы в списке, которые отлично работали.путают о Textview и Listview для отображения списка

Теперь я хотел отобразить элементы, которые я получил из базы данных через JSON.

Я получаю следующее сообщение об ошибке: Вы должны указать идентификатор ресурса для TextView

я использовал тот же XML-файл, который работал до этого, вот мой all_products.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ListView 
     android:id="@+id/mobile_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:divider="@color/colorPrimaryDark" 
     android:dividerHeight="1px"> 
    </ListView> 

</LinearLayout> 

В моей Java класс Я использовал код, который я использовал ранее для адаптера массива, я изменил только параметр, который должен отображаться. Вот часть моей AllProductsActivity.java:

private void processValue(ArrayList<String> result) { 
    { 
     ArrayAdapter adapter = new ArrayAdapter<String>(AllProductsActivity.this, R.layout.all_products, result); 
     ListView listView = (ListView) findViewById(R.id.list); 
     listView.setAdapter(adapter); 
    } 
} 

результат приходит от моего AsyncTask. здесь также имеется фрагмент:

JSONArray jsonArray = new JSONArray(result.toString()) 
ArrayList<String> listdata = new ArrayList<String>(); 
for(int n = 0; n < jsonArray.length(); n++) 
{ 
    JSONObject object = jsonArray.getJSONObject(n); 
    listdata.add(object.optString("nr")); 
} 
return listdata; 
protected void onPostExecute(ArrayList<String> result) {  
    pdLoading.dismiss(); 
    processValue(result); 
} 

Почему я получаю сообщение об ошибке? И, возможно, об использовании только Textview. Когда я искал toppic, я обнаружил разные угрозы, когда люди использовали Textviews вместо Listview. EDIT: Так это работает, я добавил еще один файл XML, mytextview.xml

<TextView android:id="@+id/mytext" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:divider="@color/colorPrimaryDark" 
android:dividerHeight="1px" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

и изменил adapterstatement на следующее:

  ArrayAdapter adapter = new ArrayAdapter<String>(AllProductsActivity.this, 
       R.layout.mytextview,R.id.mytext , result); 
     ListView listView = (ListView) findViewById(R.id.mobile_list); 
     listView.setAdapter(adapter); 
+0

Какие ошибки вы получаете? – Divers

+0

Вы добавляете файл макета all_products в адаптер массива. Это неверно. Адаптер Array ожидает файл макета, представляющий элемент списка, например. файл макета с именем list_item.xml, который содержит, например, TextView, где вы можете показать нужную строку для элемента списка ... –

+0

Почему вы поставляете all_products.xml при создании объекта адаптера? Это родительский макет, в котором находится ваш список. Вместо этого вы должны создать отдельный макет с текстовым представлением и предоставить этот макет в параметре. –

ответ

3

при использовании пользовательского макета R.layout.all_products то адаптер дон Не знаете о представлении, чтобы установить данные из списка данных

так просто вам нужно указать адаптер, идентификатор вашего t ext, чтобы установить данные.

ArrayAdapter adapter = new ArrayAdapter<String> 
        (AllProductsActivity.this, 
         R.layout.all_products,R.id.your_text_view_id, result); 
//            ^^^^^^^^^ pass the text view ID 

ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

или

Если вы просто хотите, чтобы отображать данные без какого-либо пользовательского макета, то можно использовать в построить андроида расположение ресурсов в

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,result); 
-1

При вызове вашего ArrayAdapter, указанный вами идентификатор должен быть из макета, содержащего только TextView. Это то, что ошибка You must supply a resource ID for a TextView означает

+0

"должно быть из макета, содержащего только TextView" Не верно. Ответ Павнея верен. – Kuffs

+0

Ну, это правда, когда вы используете конструктор ArrayAdapter (Context, int List). Описание для этого параметра: __Идентификатор ресурса для файла макета, содержащего TextView для использования при создании представлений .__ Но да, я думаю, что в моем ответе не хватает некоторых деталей и объяснений. – Sunshinator

+0

«Содержит текстовое представление», а не «содержащий ТОЛЬКО текстовое представление». – Kuffs

1

в первом растворе Pavneet Позаботимся что:

ресурс: это ресурс, содержащий TextView не файл XML, который содержит сам список (не R.layout.all_products)

textViewResourceId: идентификатор TextView, содержащиеся в ресурсе

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

  • Нет связанных вопросов^_^