#android #listview #adapter
#Android #listview #адаптер
Вопрос:
Мне нужна небольшая помощь с моим пользовательским адаптером просмотра списка. Я использую пример адаптера из vogella.de , но мне нужно найти способ, как установить текст и изображение из базы данных sqlite. Вот код адаптера, который я использую :
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyArrayAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] names;
Cursor cursor;
public MyArrayAdapter(Activity context, String[] names) {
super(context, R.layout.main_listview, names);
this.context = context;
this.names = names;
}
// static to save the reference to the outer class and to avoid access to
// any members of the containing class
static class ViewHolder {
public ImageView imageView;
public TextView textView,textView2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ViewHolder will buffer the assess to the individual fields of the row
// layout
ViewHolder holder;
// Recycle existing view if passed as parameter
// This will save memory and time on Android
// This only works if the base layout for all classes are the same
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(R.layout.main_listview, null, true);
holder = new ViewHolder();
holder.textView = (TextView) rowView.findViewById(R.id.main_name);
holder.textView2 = (TextView) rowView.findViewById(R.id.main_info);
holder.imageView = (ImageView) rowView.findViewById(R.id.main_img);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
final Bitmap b = BitmapFactory.decodeFile("/sdcard/52dde26940e0d3081f6a086d4b54cd1c.jpg", null);
holder.textView.setText("");
holder.textView2.setText("");
holder.imageView.setImageBitmap(b);
return rowView;
}
public String[] getNames() {
return names;
}
}
И я пытаюсь установить текст в текстовом виде следующим образом :
String sql = "SELECT title FROM collections";
Cursor cursorTitle = userDbHelper.executeSQLQuery(sql);
if(cursorTitle.getCount()==0){
Log.i("Cursor Null","CURSOR TITLE NULL");
} else if(cursorTitle.getCount()>0){
cursorTitle.moveToFirst();
String text = cursorTitle.getString(cursorTitle.getColumnIndex("title"));
Log.i("title text","title text : " text);
String[] names = new String[] { text };
listView.setAdapter(new MyArrayAdapter(this, names));
}
, но когда я запускаю этот код, в результате я ничего не получаю в своем listview.
Итак, кто-нибудь может подсказать мне, как я могу установить текст и изображение в imageview и textview в моей деятельности с помощью этого адаптера.
Большое спасибо!
Комментарии:
1. какие-либо ошибки в logcat? курсор пуст? есть ли у вас данные в ваших таблицах sqlite? вы устанавливаете текст как «». это изображение может отсутствовать на вашей SD-карте…
2. Я не получаю никаких ошибок в моем Logcat, изображение находится на SD-карте, у меня с этим нет проблем. У меня есть данные в моих таблицах, и курсор не пуст.
Ответ №1:
Проверьте это
String text = cursorTitle.getString(cursorTitle.getColumnIndex("title"));
Log.i("title text","title text : " text);
String[] names = new String[] { text };
Каков результат «текста» в LogCat?
Любое значение, хранящееся в массиве ‘names’?
Комментарии:
1. Результат: «Образец текста» — как в моей базе данных sqlite.
cursor
Иtext
не являются нулевыми.
Ответ №2:
Где вы использовали массив строк в адаптере, который вы передали ему? я думаю, вы установили null в обоих ваших текстовых представлениях. Вам нужно использовать его как holder.textview.setText (имена [позиция]) в вашем адаптере. И, во-вторых, вы должны использовать цикл for для создания вашего массива строк из курсора.Похоже, вы всегда будете получать только первый результат ваших данных курсора.
Ответ №3:
Попробуйте сделать что-то вроде этого :
MyAddapterClass :
private final Activity context;
private final String[] names;
private final Bitmap image;
private final String text;
private final String text2;
Cursor cursor;
public MyArrayAdapter(Activity context, String[] names, Bitmap image, String text, String text2) {
super(context, R.layout.main_listview, names);
this.context = context;
this.names = names;
this.image = image;
this.text = text;
this.text2 = text2;
}
и set image
, text
и text2
вашим владельцам :
holder.textView.setText(text);
holder.textView2.setText(text2);
holder.imageView.setImageBitmap(image);
и инициализируйте его в своей деятельности.Вот и все.
Надеюсь, это поможет!