如何在基本适配器类中访问活动对象。我使用适配器类作为我的列表视图的适配器。我想访问listview之外的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 :(得分: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);
}
};
然后在适配器中,如果需要,将其称为:
if (this.adapterhandler != null) {
this.adapterhandler.updateText(String.valueOf(new DecimalFormat("##.##").format(grandTotal)));
}
代码相对较长,但这是正确且更具可扩展性的方法。
答案 1 :(得分:3)
创建适配器时传递上下文,使用该上下文获取膨胀视图。
Adapter adapter = new Adapter(this);
然后在Adpater类构造函数中:
public Adapter(Context context){
context.findViewById(R.id.textview);
}
答案 2 :(得分:0)
如果您具有Activity中的上下文,则可以像这样在ListView之外获取TextView和其他视图:
// Get the rootView from the activity
final View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content);
// Get the textView from the rootView
TextView mTextView = rootView.findViewById(R.id.your_text_view);
// Do something with it
mTextView.setText("Hello my friend!");
答案 3 :(得分:0)
调用构造函数时,可以在设置适配器之前从类中发送任何对象,然后可以在适配器中接收这些参数。
final ChannelsAdapter channelAdapter = new ChannelsAdapter(allChannelList, SoftKeyboard.this);
channelRecyclerView.setAdapter(channelAdapter);