2011-08-19 54 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

相關問題