如何从“回收者视图适配器”中调用“活动”方法?或更妙的是,如何从适配器访问活动的UI元素?

时间:2018-11-03 10:22:26

标签: android android-recyclerview recycler-adapter

我在ItemActivity中有一个回收站视图,它的适配器是一个单独的类ItemAdapter。现在根据所选项目的数量,我需要更新放置在ItemActivity中的按钮上的文本。该怎么做?

注意:我已经将getApplicationContext()作为上下文传递给了Adapter。它传递了我在清单中设置的GlobalValue上下文。

Type Event

以下是我的ItemActivity.xaml

    document.addEventListener('deviceready', () => {
  admob.interstitial.load({
    id: {
      // replace with your ad unit IDs
      android: 'ca-app-pub-1266469958489664/1154250177',
      ios: 'ca-app-pub-xxx/zzz',
    },
  })
}, false)

document.addEventListener('admob.interstitial.load', () => {
  // handle event
   document.getElementById('showAd').onclick = function() {
      admob.interstitial.show()
    }

},)

这就是我实例化适配器对象的方式

<application
    android:name=".GlobalValues"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:theme="@style/AppTheme">

我需要从适配器更改ItemActitvity中ItemCount的值!请告诉我如何实现。谢谢!

4 个答案:

答案 0 :(得分:0)

最简单的方法是使Adapter类成为Activity类中包含的内部类。然后使您需要操作全局变量的View。

答案 1 :(得分:0)

从以下位置更改活动中的适配器实例:

ItemPickerAdapter adapter = new ItemPickerAdapter(getApplicationContext(), ItemsList);

对此:

ItemPickerAdapter adapter = new ItemPickerAdapter(this, ItemsList);

表示您通过活动的上下文,而不是应用程序的上下文。
然后在您的适配器类中声明以下内容:

MainActivity mainActivity = (MainActivity) context;

用活动的类名替换MainActivity,并用Context的适配器类构造函数的参数名替换context

现在,您可以通过以下方式访问每个公共方法,属性和活动中的视图:

mainActivity.something

Edit1 :在活动类中使用变量

Context mainContext = this;

然后实例化适配器:

ItemPickerAdapter adapter = new ItemPickerAdapter(mainContext, ItemsList);

Edit2 :如果要从适配器访问活动的UI元素,例如TextView,请在活动类中创建一个公共方法:

public void setTextViewText(String text) {
    myTextView.setText(text);
}

并从适配器中调用它:

mainActivity.setTextViewText("some text");

答案 2 :(得分:0)

您可以执行以下操作

创建一个界面

public interface ItemCountListner {
  void onItemCountUpdate(int count);
}

在您的活动中实现接口,并将引用传递给适配器

class MainActivity implements ItemCountListner {

---------
ItemPickerAdapter adapter = new ItemPickerAdapter(MainActivity.this, ItemsList, this);
---------

//implemented method
void onItemCountUpdate(int count){
 // update your ui
}
}

在适配器构造函数中添加参数

  

public ItemPickerAdapter(上下文上下文,列表itemList,   ItemCountListner侦听器)

通过调用更新您的用户界面

listener.onItemCountUpdate(count);

答案 3 :(得分:0)

在RecyclerView适配器内部,您可以定义自己的viewModel,在其中,您可以在所需的任何组件上附加onClick。例如:

 public class MyViewHolder extends RecyclerView.ViewHolder
    {
        private TextView eachFeaturesName;


        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            eachFeaturesName = itemView.findViewById(R.id.eachFeaturesName);
            }
    }

在onBindViewHolder函数中,您可以执行以下操作:

public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int position) {

//myViewHolder.eachFeaturesName.setonViewClickListener(...)

}

这是在RecyclerView上使用onClickListener的简单方法