如何将值从一个Activity传递到另一个Activity并在适配器中显示?

时间:2016-06-11 07:44:26

标签: android firebase android-recyclerview recycler-adapter

我的RecyclerViewerActivity里面有自定义适配器。 RecyclerViewer中有产品类别,适配器包含每个类别的名称,如:

category 1 = "drinks", category 2 - "dairy", category 3 = "pasta".

当用户点击"饮料" - 使用列表视图调用新ActivityDrinks来添加此类别的项目 - 他可以添加苏打水,可乐。

如果他点击"乳制品" - ActivityDairy打开,他可以添加牛奶,酸奶......

现在我尝试在列表中实现现有项目的一些指示符并将其传递给适配器。如果ActivityDrinks中至少有一个项目 - 我想在类别名称上方显示一些图像在我的适配器中(在RecyclerViewer活动中)。因此,用户可以看到他是否有类别的项目或没有。

我添加了布尔变量来检查每个活动中的ArrayList(ActivityDrinks,ActivityDairy):

if (arrayList == null) {
    return false;
}
else {
    return true;
}

这部分有效,但现在我想在我的适配器中显示类别名称上方的图像(适配器保存每个类别的名称+ ImageView以保存指示符),具体取决于变量的值:if { {1}} - 显示图片。

这是我的布局代码(对于RecyclerView的单卡):

variable = true

enter image description here

这是我在ActivityDrinks(使用Firebase)中检查数组列表的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/ImageBack"
       android:background="@drawable/back_standart">

       <!--name of Category (like "drinks")-->
       <TextView
        android:text="text"
        android:id="@+id/item_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:textSize="22dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="35dp"
        android:layout_marginRight="8dp" />

      <!--desired indicator-->
       <ImageView
        android:background="@drawable/iclun"
        android:id="@+id/badgeView"
        android:layout_marginLeft="100dp"
        android:textColor="#FFF"
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/item_title" />

 </RelativeLayout>

我的适配器:

      public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot snap: dataSnapshot.getChildren()){
                Log.e(snap.getKey(),snap.getChildrenCount()+"");
            }
            if(dataSnapshot.getChildrenCount()>0){
                index_badge = true;

我尝试使用putExtras并将my变量的值传递给RecyclerViewActivity。但我真的不明白如何将变量的值传递给RecyclerView中的每个项目。对于&#34;饮料&#34;这将是真实的,并且对于&#34; Diary&#34; - false,因为ActivityDairy中没有任何项目。在这种情况下,在我的饮料适配器中,我需要显示图像/指示器和日记 - 不是。

2 个答案:

答案 0 :(得分:1)

Intent应该用于将值从一个活动传递到另一个活动。

你可以这样:

List<DAIRY> listOfDairy = new ArrayList<DAIRY>();
// add dairy...

Intent intent = new Intent(this, ReceivingClass.class);
i.putExtra("KEY_DAIRY", listOfDairy);
startActivity(intent); 

然后在你的ReceivingClass上,你可以像这样检索它:

List<DAIRY> dairyList = getIntent().getParcelableArrayListExtra("KEY_DAIRY");

如果您不需要列表,那么您可以通过Intent传递String / Boolean。 要做到这一点:

Intent intent = new Intent(this, ReceivingClass.class);    
i.putExtra("KEY_HAS_DAIRY", true);
startActivity(intent);

然后

boolean hasDairy = getIntent().getBooleanExtra("KEY_HAS_DAIRY");

答案 1 :(得分:-1)

使用SharedPreferences解决了这个问题。我将ActivityDrinks的值发送到RecyclerViewerActivity:

    final SharedPreferences pref = getSharedPreferences("filename",MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    editor.putBoolean("key",index_badge);
    editor.apply();
    Log.e("key","index"+index_badge);

并在RecyclerViewerActivity中检索值:

     SharedPreferences pref = getSharedPreferences("filename", MODE_PRIVATE);
     Boolean a = pref.getBoolean("key", false);

该代码适用于我。