2015-11-25 47 views
1

如何訪問基礎適配器類中的活動對象。我使用適配器類作爲我的列表視圖的適配器。我想訪問列表視圖之外的textview,但listview和textview處於同一活動中。我在適配器類試過這樣:如何訪問適配器類中的活動對象

  holder.grandTotal = (TextView) ShopCartActivity.findViewById(R.id.txtGrandTotal); 
     holder.grandTotal.setText(String.valueOf(new DecimalFormat("##.##").format(grandTotal))); 

但錯誤是在這句法來:

ShopCartActivity. //ERROR 

我想這樣太:

ShopCartActivity.this or ShopCartActivity.class 

我在適配器的構造函數中嘗試這個它的工作類(但價值尚未計算),但是當我把它放在getView()方法中,我的所有計算正在發生,它不工作。

基本上我想在循環返回基本適配器中的值之後設置textview的值。有沒有辦法用findviewbyid方法訪問對象?

+0

將上下文傳遞給適配器類構造函數。並使用上下文事後這樣'context.findViewById(R.id.txtGrandTotal);' – makata

+0

我在構造函數中getView方法有但不是通過上下文其作品 –

回答

3

當您創建適配器時傳遞上下文,使用該上下文獲取充氣視圖。

Adapter adapter = new Adapter(this); 
在Adpater類的構造函數

然後:

public Adapter(Context context){ 
context.findViewById(R.id.textview); 
} 
+0

感謝你的方法很簡短 –

+0

從來沒有過上下文來適配器。這是內存泄漏。 – SuperHaker

+0

在適配器類中保持上下文不會導致內存泄漏。澄清檢查這篇文章的答案https://stackoverflow.com/questions/9037370/using-the-passed-context-in-an-arrayadapter –

5

應嘗試從適配器內訪問活動。這是糟糕的編程。如果您想將某些值傳遞給Activity並在其中執行某些操作,請使用一些回調機制(抽象類或接口)將值傳遞給活動,然後讓活動更新TextView的文本。

public abstract class AdapterHandler 
{ 
    public void updateText(String text) {} 
} 

然後創建在適配器這個類的一個對象:

public AdapterHandler adapterhandler; 

然後在Activity設定的處理程序,初始化適配器後,使用抽象類

示例代碼:

adapter.adapterhandler = new AdapterHandler() { 
    @Override 
    public void updateText(String text) { 
     ShopCartActivity.this.grandTotal.setText(text); 
    } 
}; 

然後在適配器中,在需要的地方調用它lik e:

if (this.adapterhandler != null) { 
    this.adapterhandler.updateText(String.valueOf(new DecimalFormat("##.##").format(grandTotal))); 
} 

代碼相對較長,但這是做到這一點的適當且更具可擴展性的方式。

+0

小混亂解釋更多! –

+0

作品謝謝 –

+0

this.adapterhandler!= null如果我把它放在getView()裏面的click方法中,它會變成null? –

相關問題