. Я пытаюсь создать список, получающий помеченный список элементов для указания статуса для пользователя. Я смог создать отображение флага с помощью желтого фона (см. Снимок внизу). В Теории в списке с флагом может быть много помеченных элементов. Однако в моем приложении показаны только первые три флага. Я считаю, что это потому, что они изначально обращены к экрану. Флагированный фон, который не, нарисованный первоначально на экране, не отображается. Я хотел бы знать, как отобразить оставшиеся флаги в списке.getView показывает только отмеченные фоны для обрамленных просмотров. Он не показывает отмеченный фон при прокрутке для просмотра большего количества элементов в списке.
ListView Recycling: Фоновые рисунки в спискеView перерабатываются в getView(). Эта рециркуляция идет от позиции 0 до позиции 9. У меня есть флаги, которые должны совпадать в положениях 13, 14 и так далее. Эти позиции не отображаются.
listView.getCheckedItemPositions() для нескольких выборов: Этот метод не будет работать в моем случае, потому что пользователь не будет выбирать флаги. Флаги поступают с сервера.
setNotifyOnChange() и/или общественная виртуальная недействительным SetNotifyOnChange (BOOL notifyOnChange): Я не добавлять новые данные в список, так что я не вижу, как этот метод будет работать для моей программы. Предоставляет ли этот метод доступ к getview, когда он перерабатывает данные? Я не смог найти ответ на это в своих исследованиях.
public void registerDataSetObserver: Это может быть излишним для моей проблемы, но возможно ли иметь объект-наблюдатель, который отслеживает все позиции в списке моих элементов и в моем списке флагов, независимо от того, пересматривается ли представление и сопоставить их на экране?
flagged backgrounds from server http://www.leobee.com/android/push/so/flag.jpg
Код:
package com.convention.notification.app;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class NewsRowAdapter extends ArrayAdapter<Item> {
private Activity activity;
private List<Item> items;
private Item objBean;
private int row;
private List<Integer> disable;
View view ;
int disableView;
public NewsRowAdapter(Activity act, int resource, List<Item> arrayList, List<Integer> disableList) {
super(act, resource, arrayList);
this.activity = act;
this.row = resource;
this.items = arrayList;
this.disable=disableList;
System.out.println("results of delete list a:"+disable.toString());
}
public int getCount() {
return items.size();
}
public Item getItem(int position) {
return items.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
for(int k =0;k < disable.size();k++){
if(position==disable.get(k)){
//System.out.println("is "+position+" value of disable "+disable.get(k));
disableView=disable.get(k);
//AdapterView.getItemAtPosition(position);
}
}
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(row, null);
getItemViewType(position);
long id=getItemId(position);
if(position==disableView){
view.setBackgroundColor(Color.YELLOW);
System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView);
}else{
view.setBackgroundColor(Color.WHITE);
System.out.println(" background set to white at position "+position +" disableView is at "+disableView);
}
//ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge;
holder = new ViewHolder();
/* setTag Sets the tag associated with this view. A tag can be used to
* mark a view in its hierarchy and does not have to be unique
* within the hierarchy. Tags can also be used to store data within
* a view without resorting to another data structure.
*/
view.setTag(holder);
} else {
//the Object stored in this view as a tag
holder = (ViewHolder) view.getTag();
}
if ((items == null) || ((position + 1) > items.size()))
return view;
objBean = items.get(position);
holder.tv_event_name = (TextView) view.findViewById(R.id.tv_event_name);
holder.tv_event_date = (TextView) view.findViewById(R.id.tv_event_date);
holder.tv_event_start = (TextView) view.findViewById(R.id.tv_event_start);
holder.tv_event_end = (TextView) view.findViewById(R.id.tv_event_end);
holder.tv_event_location = (TextView) view.findViewById(R.id.tv_event_location);
if (holder.tv_event_name != null && null != objBean.getName()
&& objBean.getName().trim().length() > 0) {
holder.tv_event_name.setText(Html.fromHtml(objBean.getName()));
}
if (holder.tv_event_date != null && null != objBean.getDate()
&& objBean.getDate().trim().length() > 0) {
holder.tv_event_date.setText(Html.fromHtml(objBean.getDate()));
}
if (holder.tv_event_start != null && null != objBean.getStartTime()
&& objBean.getStartTime().trim().length() > 0) {
holder.tv_event_start.setText(Html.fromHtml(objBean.getStartTime()));
}
if (holder.tv_event_end != null && null != objBean.getEndTime()
&& objBean.getEndTime().trim().length() > 0) {
holder.tv_event_end.setText(Html.fromHtml(objBean.getEndTime()));
}
if (holder.tv_event_location != null && null != objBean.getLocation()
&& objBean.getLocation().trim().length() > 0) {
holder.tv_event_location.setText(Html.fromHtml(objBean.getLocation()));
}
return view;
}
public class ViewHolder {
public TextView
tv_event_name,
tv_event_date,
tv_event_start,
tv_event_end,
tv_event_location
/*tv_event_delete_flag*/;
}
}
Logcat:
06-12 20:54:12.058: I/System.out(493): item disalbed is at postion :0
06-12 20:54:12.058: I/System.out(493): item disalbed is at postion :4
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :5
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :13
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :14
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :17
06-12 20:54:12.069: I/System.out(493): results of delete list :[0, 4, 5, 13, 14, 17]
06-12 20:54:12.069: I/System.out(493): results of delete list a:[0, 4, 5, 13, 14, 17]
06-12 20:54:12.069: I/System.out(493): set adapaer to list view called;
06-12 20:54:12.128: I/System.out(493): background set to yellow at position 0 disableView is at 0
06-12 20:54:12.628: I/System.out(493): background set to white at position 1 disableView is at 0
06-12 20:54:12.678: I/System.out(493): background set to white at position 2 disableView is at 0
06-12 20:54:12.708: I/System.out(493): background set to white at position 3 disableView is at 0
06-12 20:54:12.738: I/System.out(493): background set to yellow at position 4 disableView is at 4
06-12 20:54:12.778: I/System.out(493): background set to yellow at position 5 disableView is at 5
06-12 20:54:12.808: I/System.out(493): background set to white at position 6 disableView is at 5
06-12 20:54:12.838: I/System.out(493): background set to white at position 7 disableView is at 5
Это ссылка на мой первый вопрос дня назад:
Change Background on a specific row based on a condition in Custom Adapter
Я ценю вашу помощь!