Это был мой оригинальный метод GetView для ListView BaseAdapter:BaseAdapter.getView() для ListActivty с помощью ViewHolder - Android
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
ImageHelper ih = new ImageHelper();
imageView.setImageBitmap(ih.decodeSampledBitmapFromResource(mContext.getResources(), mList.get(position), 40, 40));
return imageView;
}
Это не использовать convertView и у меня не было mInflater. Я читал, что этот способ не подходит для использования памяти, и я нашел лучший способ использования ViewHolder. Я изменил этот метод, чтобы реализовать viewHolder и использовать convertView вместо произведя ImageView, как я первоначально сделал:
static class ViewHolder{
TextView text;
ImageView icon;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
ImageView imageView = new ImageView(mContext);
ImageHelper ih = new ImageHelper();
if (convertView == null) {
convertView = mInflater.inflate(R.id.gridviewViewOutfits, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView;
holder.icon.setLayoutParams(new GridView.LayoutParams(150, 150));
holder.icon.setScaleType(ImageView.ScaleType.FIT_CENTER);
holder.icon.setPadding(8, 8, 8, 8);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.icon.setImageBitmap(ih.decodeSampledBitmapFromResource(mContext.getResources(), mList.get(position), 40, 40));
return convertView;
}
Эта линия вызвала NullPointerException: convertView = mInflater.inflate(R.id.gridviewViewObjects, null);
Это потому, что я не экземпляр моего mInflater. Затем я сделал это вот так: mInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Потому что я видел это онлайн. Тогда я получил эту ошибку:
01-20 20:37:52.080: E/AndroidRuntime(22543): FATAL EXCEPTION: main
01-20 20:37:52.080: E/AndroidRuntime(22543): android.content.res.Resources$NotFoundException: Resource ID #0x7f04002b type #0x12 is not valid
01-20 20:37:52.080: E/AndroidRuntime(22543): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2136)
01-20 20:37:52.080: E/AndroidRuntime(22543): at android.content.res.Resources.getLayout(Resources.java:865)
01-20 20:37:52.080: E/AndroidRuntime(22543): at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
01-20 20:37:52.080: E/AndroidRuntime(22543): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
01-20 20:37:52.080: E/AndroidRuntime(22543): at com.btf271.imagehelper.ChooseStickersImageAdapter.getView(ChooseObjectsImageAdapter.java:136)
Что я должен сделать, чтобы создать экземпляр mInflater, или я накачивание неправильной вещи?
Это мой XML для ListActivity:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ViewOutfitsActivity" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
<GridView
android:id="@+id/gridviewViewObjects"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</RelativeLayout>
Спасибо.
Мой gridViewViewOutfits - это просто представление внутри моего макета ListActivity. Итак, нужно ли щелкнуть правой кнопкой мыши папку макета и щелкнуть новый файл XML, чтобы создать новый макет? Тогда раздуйте это? Спасибо. – user3164083
Да, если вы хотите создать собственный список, тогда вы должны использовать его. И вы идете в правильном направлении. – Piyush
Спасибо. Для моего пользовательского макета есть много корневых элементов. Я выбираю RelativeLayout или ListView или что-то еще? – user3164083