У меня есть представление списка внутри alertDialog. Я заполняю свое представление списка пользовательским resourceCursorAdapter, и каждая строка содержит заголовок textView, date textView и изображение.
Все работает хорошо, за исключением того, что кажется, что когда вы прокручиваете просмотр списка, некоторые из текстовых представлений даты в некоторых строках исчезают. Я выяснил, почему они исчезают, но не как это исправить ... Некоторые элементы не предназначены для отображения дат, поэтому у меня есть оператор if в bindview, который определяет, должны ли даты отображаться или нет. Это работает для любого списка за пределами модуля alerttdialog, но некоторые даты, которые должны отображаться, исчезают. Кто-нибудь знает, почему это происходит?
Мой код для диалогового окна оповещения и просмотра списка:
itemSendPickerDialog = new Dialog(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Item to Send");
ListView lv = new ListView(this);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long i) {
}
});
AlertDialog sendOptionAlert = sendOptionBuilder.create();
sendOptionAlert.show();
System.out.println("ID is: " + iid + " and position is: " + position);
itemSendPickerDialog.dismiss();
}
});
Cursor c = mDbHelper.fetchItemsByDate(id);
c.moveToFirst();
int i = R.layout.send_item_menu_row;
MyListAdapter ia = new MyListAdapter(this, i, c);
lv.setAdapter(ia);
builder.setView(lv);
itemSendPickerDialog = builder.create();
itemSendPickerDialog.show();
И мой пользовательский список Адаптер:
class MyListAdapter extends ResourceCursorAdapter {
public MyListAdapter(Context context, int i, Cursor cursor) {
super(context, i, cursor);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView title = (TextView) view.findViewById(R.id.item_name);
title.setText(cursor.getString(cursor.getColumnIndex(TripsDbAdapter.KEY_ITEM_TITLE)));
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
width = width - 150;
ViewGroup.LayoutParams params = title.getLayoutParams();
params.width = width;
title.setLayoutParams(params);
String cat = cursor.getString(cursor.getColumnIndex(TripsDbAdapter.KEY_ITEM_CATEGORY));
if (cat.equalsIgnoreCase("trip notes")) {
LinearLayout ll = (LinearLayout) view.findViewById(R.id.item_datetime_holder);
ll.setVisibility(View.INVISIBLE);
}
TextView date = (TextView) view.findViewById(R.id.item_date);
date.setText(cursor.getString(cursor.getColumnIndex(TripsDbAdapter.KEY_DEP_DATE)));
TextView time = (TextView) view.findViewById(R.id.item_time);
time.setText(cursor.getString(cursor.getColumnIndex(TripsDbAdapter.KEY_DEP_TIME)));
ImageView iv = (ImageView) view.findViewById(R.id.image_icon);
if (iv != null) {
int index = cursor.getColumnIndex(TripsDbAdapter.KEY_ITEM_TYPE);
String type = cursor.getString(index);
if (type != null) {
} else {
type = "notes";
}
iv.setImageResource(getTypeResource(type));
}
}
public static int getTypeResource(String type) {
if (type.equalsIgnoreCase("flight")) {
return R.drawable.airplaneicon;
}
if (type.equalsIgnoreCase("boat/ship")) {
return R.drawable.boatshipicon;
}
if (type.equalsIgnoreCase("bus")) {
return R.drawable.busicon;
}
if (type.equalsIgnoreCase("rail")) {
return R.drawable.railicon;
}
if (type.equalsIgnoreCase("auto or other rentals")) {
return R.drawable.caricon;
}
if (type.equalsIgnoreCase("other transportation")) {
return R.drawable.othertransicon;
}
if (type.equalsIgnoreCase("hotel")) {
return R.drawable.hotelicon;
}
if (type.equalsIgnoreCase("resort")) {
return R.drawable.resorticon;
}
if (type.equalsIgnoreCase("bed & breakfast")) {
return R.drawable.bandbicon;
}
if (type.equalsIgnoreCase("camp ground")) {
return R.drawable.campgroundicon;
}
if (type.equalsIgnoreCase("vacation rental")) {
return R.drawable.vacationrentalicon;
}
if (type.equalsIgnoreCase("other lodging")) {
return R.drawable.otherlodgingicon;
}
if (type.equalsIgnoreCase("rail")) {
return R.drawable.railicon;
}
if (type.equalsIgnoreCase("cruise")) {
return R.drawable.cruiseicon;
}
if (type.equalsIgnoreCase("tour")) {
return R.drawable.touricon;
}
if (type.equalsIgnoreCase("dining")) {
return R.drawable.diningicon;
}
if (type.equalsIgnoreCase("spa")) {
return R.drawable.spaicon;
}
if (type.equalsIgnoreCase("class")) {
return R.drawable.classicon;
}
if (type.equalsIgnoreCase("other activity")) {
return R.drawable.eventicon;
} else {
return R.drawable.notesicon;
}
}
}
Конкретный код, который делает текст исчезающим, находится в переопределении bindview:
String cat = cursor.getString(cursor.getColumnIndex(TripsDbAdapter.KEY_ITEM_CATEGORY));
if (cat.equalsIgnoreCase("trip notes")) {
LinearLayout ll = (LinearLayout) view.findViewById(R.id.item_datetime_holder);
ll.setVisibility(View.INVISIBLE);
}