2012-03-06 1 views
0

Я по-прежнему очень новичок в разработке приложений, поэтому, вероятно, это очень глупый вопрос, но я не могу найти правильный ответ (или, по крайней мере, тот, который я могу понять, имея очень ограниченное знание Java).Пользовательский адаптер массива, возвращающий пустой экран?

Я использую настраиваемый ArrayAdapter под названием ListRow. Он отлично работает с обычной Activity, но не с ListActivity, что мне нужно, чтобы он работал для моего приложения.

Ниже приведен образец кода, который я использую. Любая помощь будет очень признательна, и вы будете помогать тонне!

ListView mListview; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setListAdapter(new ListRow(this, THEME_NAMES, THEME_ICONS)); 
    getListView().setTextFilterEnabled(true); 
} 

public class ListRow extends BaseAdapter { 
    private Context mContext; 
    private String[] mThemeNames = THEME_NAMES; 
    private int[] mThemeIcons = THEME_ICONS; 


    public ListRow(Context c, String[] t, int[] i) { 
     mContext = c; 
     mThemeNames = t; 
     mThemeIcons = i; 
     mListview=(ListView)findViewById(R.id.list); 
    } 

    @Override 
    public int getCount() { 
     return mThemeNames.length; 
    } 

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

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

    @Override 
    public View getView(int position, View converView, ViewGroup parent) { 
     View List; 
     if(converView==null){ 
      List=new View(mContext); 
      LayoutInflater mLayoutinflater=getLayoutInflater(); 
      List=mLayoutinflater.inflate(R.layout.list_view, parent, false); 
     } else { 
      List = (View)converView; 
     } 
     ImageView imageView = (ImageView)List.findViewById(R.id.image); 
     TextView textView = (TextView)List.findViewById(R.id.text); 
     imageView.setImageResource(mThemeIcons[position]); 
     textView.setText(mThemeNames[position]);  
     return List; 
    } 
} 

А вот раскладка я определил для каждого элемента списка

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
    <ImageView 
    android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
    android:scaleType="center" 
    android:id="@+id/image" 
    android:layout_alignParentLeft="true" 
    android:contentDescription="@string/preview" /> 
    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/image" /> 
</RelativeLayout> 

Если вы можете, пожалуйста, используйте маленькие слова со мной лол, Java, оказалось трудно понять, для меня, а также попытайтесь объяснить как можно больше. Заранее спасибо!

ЦИФРОВОЙ ИЗ! Так что я просто положил вас на ад. Макет, содержащий элементы списка, называется list_item, а не list_view. Однако я многому научился здесь, так что СПАСИБО ВСЕ ОЧЕНЬ МНОГО! Я хотел бы, чтобы я мог помочь вам, ребята ...

Мораль этого вопроса? ПРОВЕРЬТЕ ВАШИМ НАЗВАНИЕМ!

+0

Эта ссылка вам поможет. Он содержит код для пользовательского списка в виде списка [1 ]: http: // stackoverflow.com/questions/7193741/need-help-for-on-click-listener-for-android-custom-listview – sagar

+0

Спасибо за подсказку, но, как я уже сказал, я очень новичок в java и размещаю что-то вроде этого не чтобы помочь мне, потому что я едва знаю, что я ищу ... Я буду продолжать искать более описательные примеры – Andrew

ответ

1

Вам необходимо установить адаптер в этом случае

setListAdapter(new ListRow(this, your_theme_names_array, your_theme_icon_array)); 

Вам не нужно использовать ArrayAdapter для этого, это просто для создания адаптера для массива String,

EDITED

В Layout XML нет проблемы, я думаю.

Проверьте список приводится ниже один на один

Контрольный список

  • Проверьте, правильно ли R.layout.list_view точку в макете вы данные в вопросе.
  • Попробуйте установить адаптер setListAdapter (новый ListRow (это, String [] {}, int [] {})); он покажет вам пустой экран (если вы получите экран пустого экрана, это означает, что либо THEME_NAMES, либо THEME_ICONS имеет значение NULL или их значения равны нулю)
  • Удалить изображение линии ImageView.setImageResource (mThemeIcons [position]); и textView.setText (mThemeNames [позиция]); это также даст пустой экран (если вы получите пустой экран, тогда R.layout.list_view не содержит R.id.image или R.id.text.
+0

, а также удалить эту строку 'List = new View (mContext);' from 'getView()' –

+0

Список = новый вид (mContext) требуется Когда convertView имеет значение null –

+1

нет, так как он раздувает свой вид из ресурса 'R.layout.list_view', поэтому нет необходимости создавать другой объект' View'. –

0

Вы должны добавить свой mListView в свой ArrayAdapter в setListAdapter.Only, тогда содержимое вашего списка будет отображаться в шаблоне, упомянутом вами в пользовательском адаптере. Я не вижу, где вы добавили элементы в listview.

+0

Я обновил вопрос, где я предполагал, что он должен идти, если это неверно, сообщите, где вы считаете, что он должен идти – Andrew