如何访问适配器 class 中的 Activity 对象
How to access Activity object in Adapter class
如何在基本适配器 class 中访问 activity 的对象。我使用适配器 class 作为列表视图的适配器。我想访问列表视图之外的文本视图,但列表视图和文本视图在同一 activity 中。我在适配器 class 中试过这样:
holder.grandTotal = (TextView) ShopCartActivity.findViewById(R.id.txtGrandTotal);
holder.grandTotal.setText(String.valueOf(new DecimalFormat("##.##").format(grandTotal)));
但此语法出现错误:
ShopCartActivity. //ERROR
我也这样试过:
ShopCartActivity.this or ShopCartActivity.class
我在适配器的构造函数中尝试了这个 class 它可以工作(但尚未计算值)但是当我将它放在 getView() 方法中时,我的所有计算都在该方法中进行,它不起作用。
基本上我想在循环 returns 基本适配器中的值后设置 textview 的值。有没有办法可以使用 findviewbyid 方法访问对象?
创建适配器时传递上下文,使用该上下文获取膨胀视图。
Adapter adapter = new Adapter(this);
然后在 Adpater Class 构造函数中:
public Adapter(Context context){
context.findViewById(R.id.textview);
}
您不应该 尝试从适配器中访问 activity。这是糟糕的编程。如果你想将一些值传递给 Activity 并在其中执行一些操作,请使用一些回调机制(抽象 class 或接口)将值传递给 activity 然后让activity 更新 TextView
的文本。
使用抽象的示例代码class:
public abstract class AdapterHandler
{
public void updateText(String text) {}
}
然后在Adapter中创建这个class的对象:
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)));
}
代码相对较长,但这是正确且更具可扩展性的方法。
如果您有来自 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!");
您可以在调用构造函数时设置适配器之前发送来自 class 的任何对象,然后可以在适配器中接收这些参数。
final ChannelsAdapter channelAdapter = new ChannelsAdapter(allChannelList, SoftKeyboard.this);
channelRecyclerView.setAdapter(channelAdapter);
如何在基本适配器 class 中访问 activity 的对象。我使用适配器 class 作为列表视图的适配器。我想访问列表视图之外的文本视图,但列表视图和文本视图在同一 activity 中。我在适配器 class 中试过这样:
holder.grandTotal = (TextView) ShopCartActivity.findViewById(R.id.txtGrandTotal);
holder.grandTotal.setText(String.valueOf(new DecimalFormat("##.##").format(grandTotal)));
但此语法出现错误:
ShopCartActivity. //ERROR
我也这样试过:
ShopCartActivity.this or ShopCartActivity.class
我在适配器的构造函数中尝试了这个 class 它可以工作(但尚未计算值)但是当我将它放在 getView() 方法中时,我的所有计算都在该方法中进行,它不起作用。
基本上我想在循环 returns 基本适配器中的值后设置 textview 的值。有没有办法可以使用 findviewbyid 方法访问对象?
创建适配器时传递上下文,使用该上下文获取膨胀视图。
Adapter adapter = new Adapter(this);
然后在 Adpater Class 构造函数中:
public Adapter(Context context){
context.findViewById(R.id.textview);
}
您不应该 尝试从适配器中访问 activity。这是糟糕的编程。如果你想将一些值传递给 Activity 并在其中执行一些操作,请使用一些回调机制(抽象 class 或接口)将值传递给 activity 然后让activity 更新 TextView
的文本。
使用抽象的示例代码class:
public abstract class AdapterHandler
{
public void updateText(String text) {}
}
然后在Adapter中创建这个class的对象:
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)));
}
代码相对较长,但这是正确且更具可扩展性的方法。
如果您有来自 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!");
您可以在调用构造函数时设置适配器之前发送来自 class 的任何对象,然后可以在适配器中接收这些参数。
final ChannelsAdapter channelAdapter = new ChannelsAdapter(allChannelList, SoftKeyboard.this);
channelRecyclerView.setAdapter(channelAdapter);