2016-06-11 3 views
0

У меня есть RecyclerViewerActivity с пользовательским адаптером внутри. Есть категории продуктов в RecyclerViewer и адаптер имеет имя для каждой категории, как:Как передать значение из одного действия в другое и показать его в адаптере?

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

Когда пользователь нажимает на «напитки» - новые ActivityDrinks называемых с учетом списка, чтобы добавить элементы для этого category- он может добавить соду, колы.

Если он нажимает на «молочные продукты», - ActivityDairy открывается, и он может добавить молоко, йогурт ...

Теперь я пытаюсь реализовать некий индикатор существующих элементов в списке и передать его в adapter.So, если есть хотя бы один элемент в ActivityDrinks - Я хочу отобразить некоторое изображение над именем категории в моем адаптере (в действии RecyclerViewer). Таким образом, пользователь может увидеть, есть ли у него какие-либо предметы в категории или нет.

Я добавил логическую переменную для проверки ArrayList в любой деятельности (ActivityDrinks, ActivityDairy):

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

Эта часть работает, но теперь я хочу, чтобы отобразить изображение над названием категории в моем адаптер (адаптер содержит название каждой категории + ImageView для удержания индикатора) в зависимости от значения переменной: если variable = true - отображаемое изображение.

Это мой Компоновка код (для одной карты RecyclerView):

<?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> 

enter image description here

И это мой код для проверки списка массива в ActivityDrinks (Использование Firebase):

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

Адаптер:

 @Override 
     public void onBindViewHolder(ViewHolder viewHolder, final int position) { 

    viewHolder.txtViewTitle.setText(itemsData[position].getItem_title());     

    viewHolder.badge.setImageResource(itemsData[position].getBadge_index()); 

Я попытался использовать putExtras и передать значение моей переменной в RecyclerViewActivity. Но я действительно не понимаю, как передать значение переменной каждому элементу в RecyclerView. Возможно, что для «Напитков» это будет верно, а для «Дневника» - false, потому что в ActivityDairy нет элементов. В этом случае в моем адаптере для напитков мне нужно отобразить изображение/индикатор, а для дневника - нет.

+2

добавить свой код и скриншот нужной раскладки – USKMobility

+0

Да, пожалуйста, добавьте код (не все!) И скриншот (ы). Как бы то ни было, ваш вопрос многословен и нелегко ответить, потому что вы не знаете, какова фактическая проблема. – Sufian

+0

см. Отредактированный вопрос – user5866501

ответ

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

код работает для меня.

+0

Чтобы передавать данные из одной операции в другую, вы должны использовать 'Intent'. Использование «SharedPreference» или SQLite для достижения этого явно неверно, хотя это может позволить вам продолжать работать. – Sufian

+0

'SharedPreference' не предназначен для этого, поэтому в будущем он может преследовать вас. Всегда используйте 'Intent' для передачи данных между действиями. – Sufian

+1

Вместо того, чтобы ждать, чтобы опубликовать полный ответ позже, опубликуйте этот ответ сейчас. Без этого этот ответ не очень полезен. –

1

Намерение должно использоваться при передаче значений из одной активности в другую.

Вы можете иметь что-то вроде этого:

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"); 

Если вам не нужен список, то вы можете просто передать String/Boolean через Intent. Для этого:

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

Тогда

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