Имам ListFragment, където искам определени редове да са с определен цвят. По принцип следвах това: Създаване на ListView и задаване на цвета на фона на изглед във всеки ред
GetView обаче никога не се извиква. Някой знае ли защо?
public class TrackerFragment extends ListFragment
{
private String[] list;
@Override
public void onActivityCreated(Bundle myBundle)
{
super.onActivityCreated(myBundle);
list = null;
ListView lv = getListView();
setListAdapter(null);
setEmptyText("Touch a connection to view tracker information.");
lv.setTextFilterEnabled(true);
}
public void updateList(String[] list)
{
this.list = list;
setListAdapter(new ColoredArrayAdapter(getActivity(),R.layout.list_item,list));
}
}
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="7dp"
android:textSize="14sp"
android:id="@+id/line">
</TextView>
Актуализирам списъка по този начин от моята дейност:
TrackerFragment tf = (TrackerFragment) fragmentManager.findFragmentById(R.id.tracker1);
tf.updateList(result);
Моят ColoredArrayAdapter
public class ColoredArrayAdapter extends ArrayAdapter{
private String[] list;
public ColoredArrayAdapter(Context context, int textViewResourceId,
Object[] objects) {
super(context, textViewResourceId, objects);
list = new String[objects.length];
for (int i = 0; i < list.length; i++)
list[i] = (String) objects[i];
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View vi = convertView;
ViewHolder holder;
if (convertView == null)
{
vi = LayoutInflater.from(getContext()).inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.line = (TextView) vi.findViewById(R.id.line);
vi.setTag(holder);
}
else
holder = (ViewHolder) vi.getTag();
for (int i = 0; i < list.length; i++)
{
if (list[i].contains("OUT OF LOCK"))
{
System.out.println("OUT OF LOCK");
holder.line.setText(list[i]);
//holder.line.setTextColor(R.color.white);
holder.line.setBackgroundResource(R.color.red);
}
else if(list[i].contains("IN LOCK"))
{
System.out.println("In LOCK");
holder.line.setText(list[i]);
//holder.line.setTextColor(R.color.white);
holder.line.setBackgroundResource(R.color.green);
}
else
holder.line.setText(list[i]);
}
return vi;
}
}
какво правя грешно Редактиране: добавен list_item.xml, където е намерен ред. Edit2: добавен адаптер за разширен масив
Сега проблемът ми е, че всеки ред е или изцяло зелен, или червен, когато просто искам определени отделни редове да са или червени, или зелени. Освен това нищо от текста не се показва.
NullReferenceException
? Това може да помогне да се определи причината за срива. И: Това само на линияOUT OF LOCK
ли се случва или също и на линияIN LOCK
? - person gtcompscientist   schedule 08.08.2011holder
ИЛИholder.line
преобразува ли се в нула? - person gtcompscientist   schedule 08.08.2011holder.line
е коренът на проблема. Сега откъде идва това: - Това става ли, когато се надуват? Ако е така, публикувайте кода, откъдето идваline
. - Това случва ли се, когато се използваconvertView
? - person gtcompscientist   schedule 09.08.2011