0

我有一个动态编程的 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);

但它不起作用,只是遇到了一个空指针异常。请帮忙。

4

2 回答 2

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。

于 2013-01-04T10:22:12.227 回答
0

使用ViewGroup.getChildAt(position),它将返回该位置的视图。然后将其类型转换为 TextView(因为您将 TextView 设置为直接项目视图)以设置颜色。

在动态创建对象时,您不能使用 findViewById() 的另一件事,除非您为对象设置 ID。

于 2013-01-04T09:18:53.977 回答