我有一个动态编程的textView列表......
GridView layout = (GridView) context.findViewById(R.id.linearLayout1);
PrizeAdapter adapter = new PrizeAdapter(context, 0, 0, game.getPrizeList());
layout.setAdapter(adapter);
适配器类:
public class PrizeAdapter extends ArrayAdapter<String> {
private List<String> objects;
public PrizeAdapter(Context context, int resource, int textViewResourceId,
List<String> objects) {
super(context, resource, textViewResourceId, objects);
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView text = new TextView(getContext());
text.setId(position);
text.setText(objects.get(position));
text.setTextSize(12);
text.setPadding(0, 5, 0, 5);
text.setTextColor(Color.WHITE);
text.setBackgroundColor(Color.GRAY);
text.setGravity(Gravity.CENTER | Gravity.BOTTOM);
return text;
}
}
据说,我创建了一个10 TextView。我怎样才能获得特定的textView,以便我可以对它进行不同的着色。
我试过这个
GridView layout = (GridView) context.findViewById(R.id.linearLayout1);
TextView view = (TextView) layout.findViewById(1);
view.setBackgroundColor(Color.YELLOW);
view.setTextColor(Color.RED);
但它不起作用,只是遇到了一个nullpointer异常。 请帮忙。
答案 0 :(得分:1)
这种行为的原因是你做得太早。 即使在使用id 1创建视图之前,您也试图访问它们。
所以发生的事情是,你要求适配器膨胀视图,适配器控制检查什么是可见的以及应该显示什么。 并且在if(在填充视图之前)之后立即调用findviewbyID(1),因此仍然不会创建此视图,因此您将获得空指针。
如果我们在填充网格后尝试使用按钮执行任务,则代码将起作用。
final GridView layout = (GridView) findViewById(R.id.linearLayout1);
PrizeAdapter adapter = new PrizeAdapter(this, 0, 0, objects2);
layout.setAdapter(adapter);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView view = (TextView) layout.findViewById(1);
view.setBackgroundColor(Color.YELLOW);
view.setTextColor(Color.RED);
// TODO Auto-generated method stub
}
});
所以2解决方案
1)更改颜色的延迟处理程序帖子。
2)创建一个自定义回调接口,它将返回视图1加载的结果。
答案 1 :(得分:0)
使用ViewGroup.getChildAt(position),它会返回该位置的视图。然后将它转换为TextView(当您将TextView设置为直接项目视图时)以设置颜色。
除非为对象设置ID,否则在动态创建对象时不能使用findViewById()。