如何从recyclelerview适配器内部访问活动外部的VIEWS

时间:2016-06-21 11:32:33

标签: android android-layout android-recyclerview

我使用TextView,RecyclerView创建了一个Activity。 我想从RecyclerView内部访问父活动TextView。 请注意我已经在RecyclerView中加载了数据。

请提供访问父活动TextView的任何解决方案。

参考此代码,

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:layout_marginTop="20dip"
        android:background="@android:color/holo_orange_dark"
        android:text="MY TEXT VIEW"
        android:textAlignment="center"
        android:textStyle="bold"
        android:textSize="20sp"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>

</LinearLayout>

我通过自定义适配器

成功地使用RecyclerView(rv)加载了一些数据
rv.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new custom_Adapter(this,loadData());
rv.setAdapter(mAdapter)

现在,从我的自定义适配器“onBindViewHolder”内部我想访问我的父活动TextView(tv)。请提示

 @Override
    public void onBindViewHolder(final CartViewHolder holder, int position)  {
    ....
    }

2 个答案:

答案 0 :(得分:2)

理想情况下,在父活动的onCreate()中,您将分配一个实例变量来保存对TextView的引用。

TextView textView; // Your TextView

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initialize TextView so you can access it later
    textView = (TextView) findViewById(R.id.text_message);
    }
}

现在,您可以在适配器的重写方法中访问TextView。

@Override
public void onBindViewHolder(final CartViewHolder holder, int position)  {
    textView.setText("text here");
}

答案 1 :(得分:1)

应该在适配器类中创建父类的对象,并且应该将其设置为等于适配器类的构造函数中的父类的引用。 您的Adapter类构造函数应该是这样的:

    ParentActivity mParentActivity;
    public custom_Adapter(ParentActivity parentActivity,Something Else){
        this.mParentActivity=parentActivity;
    }

mParentActivity是父类的对象,可用于访问父类中的任何公共内容,例如 mParentActivity.name