【发布时间】:2011-10-21 06:18:31
【问题描述】:
我有一个 ListFragment,我希望某些行是某种颜色。我基本上遵循了这个:Creating a ListView and setting the background color of a view in each row
但是,永远不会调用 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行? -
它发生在两个 .setBackgroundResource() 行上
-
holder或holder.line是否解析为 null? -
好的,现在我们到了某个地方。这意味着
holder.line是问题的根源。现在,这是从哪里来的: - 当它们被充气时会发生这种情况吗?如果是这样,请发布line来自的代码。 - 使用convertView时会发生这种情况吗? -
我添加了找到行的 xml。是的,在使用 convertView 时会发生这种情况。
标签: android list listview background android-fragments