2011-08-19 55 views
0

Hellow这是我的第一个问题。 林创建本教程的动态网格 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。我无法找到一种方法使其工作,我会apreciate任何帮助球员,这是我的代码:

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"); 
     } 
    }); 

谢谢。

回答

0

我认为你是在正确的轨道上,但我认为在你的适配器中照顾它是最有意义的。所以findViewById()不适合你,但是如果你改变它为convertView.findViewById()(或者你的Adapter的getView方法返回的任何视图),它就会工作。从那里你将能够操纵TextView。

+0

谢谢@icecreamman,现在我有一个空指针异常,请看看我上面的getView方法。 在此先感谢 – JohnWs

+0

我很高兴我帮助。您能否将我的回答标记为答案(带有绿色复选标记)?谢谢!另外,什么元素为null? btn或TextView,还是别的? – icecreamman

+0

再次感谢。问题是,btn正在接收NullPointerException,如果你看上面的代码,你会发现有一个OnClickListener,里面有getView()返回的值,这是btn。所以当我使用btn来获取我的textView的引用时,它会导致错误。 我只想知道如何引用gridView的单个元素,例如,如果我想在用户单击按钮1或按钮2时发生某些事情。我该怎么做?我希望你能指点我正确的方向 再次谢谢你! – JohnWs

相关问题