如何访问Adapter类中的Activity对象

时间:2015-11-25 06:59:36

标签: 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)));

但是这种语法出现了错误:

ShopCartActivity. //ERROR

我也是这样尝试的:

ShopCartActivity.this or ShopCartActivity.class

我在它运行的适配器类的构造函数中尝试了这个(但是值还没有计算)但是当我把它放在我的所有计算正在发生的getView()方法中时,它不起作用。

基本上我想在循环返回基本适配器中的值后设置textview的值。有没有办法用findviewbyid方法访问对象?

4 个答案:

答案 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);