DIG*_*EDI 1 java android listview android-listview baseadapter
如何在基本适配器类中访问活动对象.我使用适配器类作为我的列表视图的适配器.我想访问listview之外的textview,但listview和textview属于同一个活动.我试过这样的适配器类:
holder.grandTotal = (TextView) ShopCartActivity.findViewById(R.id.txtGrandTotal);
holder.grandTotal.setText(String.valueOf(new DecimalFormat("##.##").format(grandTotal)));
Run Code Online (Sandbox Code Playgroud)
但是这个语法出现了错误:
ShopCartActivity. //ERROR
Run Code Online (Sandbox Code Playgroud)
我也是这样试过的:
ShopCartActivity.this or ShopCartActivity.class
Run Code Online (Sandbox Code Playgroud)
我尝试在它适用的适配器类的构造函数中(但是值还没有计算)但是当我把它放在我的所有计算正在发生的getView()方法中时,它不起作用.
基本上我想在循环返回基本适配器中的值后设置textview的值.有没有办法用findviewbyid方法访问对象?
您不应尝试从适配器中访问活动.编程很糟糕.如果要将某些值传递给Activity并在其中执行某些操作,请使用一些回调机制(抽象类或接口)将值传递给活动,然后让活动更新TextView文本.
使用抽象类的示例代码:
public abstract class AdapterHandler
{
public void updateText(String text) {}
}
Run Code Online (Sandbox Code Playgroud)
然后在适配器中创建此类的对象:
public AdapterHandler adapterhandler;
Run Code Online (Sandbox Code Playgroud)
然后在Activity初始化适配器后设置处理程序:
adapter.adapterhandler = new AdapterHandler() {
@Override
public void updateText(String text) {
ShopCartActivity.this.grandTotal.setText(text);
}
};
Run Code Online (Sandbox Code Playgroud)
然后在适配器中,如果需要,将其称为:
if (this.adapterhandler != null) {
this.adapterhandler.updateText(String.valueOf(new DecimalFormat("##.##").format(grandTotal)));
}
Run Code Online (Sandbox Code Playgroud)
代码相对较长,但这是正确且更具可扩展性的方法.
| 归档时间: |
|
| 查看次数: |
6907 次 |
| 最近记录: |