0

你好,这是我在堆栈中的第一个问题。我正在创建本教程的动态网格 http://www.stealthcopter.com/blog/2010/09/android-creating-a-custom-adapter-for-gridview-buttonadapter/comment-page-1/

现在它工作得很好。我的布局由 gridView 组成,在这个 gridView 下我有一个 TextView。

问题是我想更改 TextView 以在焦点更改时(在网格元素上)在每个 id 上显示不同的信息。我尝试在 ButtonAdapter 中使用 OnFocusChangeListener,但是在尝试获取对 textView 的引用时,它说 findViewById 没有实现。

我想知道如何在我的主要活动中进行引用,以允许我处理我的动态网格元素。我在 onCreate(); 中有以下内容

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ButtonAdapter(this));

所以我想从这里处理我的网格元素,有什么想法吗?谢谢

编辑:我一直在尝试改变不同的东西,但我从我的 getView 方法收到了 NullPointerException 。我找不到让它工作的方法,我会感谢任何帮助的人,这是我的代码:

    public View getView(int position, View convertView, ViewGroup parent) {
    final Button btn;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        btn = new Button(mContext);
        btn.setLayoutParams(new GridView.LayoutParams(100, 55));
        btn.setPadding(8, 8, 8, 8);
    } else {
        btn = (Button) convertView;
    }

    btn.setText(filenames[position]);
    // filenames is an array of strings
    btn.setTextColor(Color.WHITE);
    btn.setId(position);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            TextView vt = (TextView) btn.findViewById(R.id.textView1);
            vt.setText("Button Pressed");
        }
    });

谢谢。

4

1 回答 1

0

我认为你在正确的轨道上,但我认为在你的适配器中处理它是最有意义的。所以 findViewById() 对您不起作用,但如果您将其更改为 convertView.findViewById() (或适配器的 getView 方法中返回的任何视图),它将起作用。从那里您将能够操作 TextView。

于 2011-08-19T19:18:04.953 回答