5

Я внедряю новый дизайн карты материалов из библиотеки Cardlib от Github. Ссылка на библиотеку: Cardslib Github Но я не могу реализовать несколько карт внутри вида Recycler. Было бы очень полезно, если бы кто-то уже реализовал новую библиотеку Cardlib v2.Материальная карточка с библиотекой Cardslib

Проблема в том, что карты идут, но у них нет фонового изображения и кнопок действий.

Компоновка карты, что я пытаюсь осуществить это:

Card Layout

Вот код для RecyclerView

<it.gmariotti.cardslib.library.recyclerview.view.CardRecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:paddingTop="10dp" 
     card:list_card_layout_resourceID="@layout/native_recyclerview_card_layout" 
     android:id="@+id/card_recyclerview"/> 

Вот код для деятельности

public class AboutActivity extends ActionBarActivity { 


    final int TOTAL_CARDS = 3; 
    //private CardArrayAdapter 
    private CardArrayRecyclerViewAdapter mCardArrayAdapter; 
    private CardRecyclerView mRecyclerView; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.about_activity); 
     ArrayList<Card> cards = new ArrayList<>(); 

     mCardArrayAdapter = new CardArrayRecyclerViewAdapter(this, cards); 

     //Staggered grid view 
     CardRecyclerView mRecyclerView = (CardRecyclerView) findViewById(R.id.card_recyclerview); 
     mRecyclerView.setHasFixedSize(false); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     //Set the empty view 
     if (mRecyclerView != null) { 
      mRecyclerView.setAdapter(mCardArrayAdapter); 
     } 

     //Load cards 
     new LoaderAsyncTask().execute(); 
    } 

    private ArrayList<Card> initCard() { 

     ArrayList<Card> cards = new ArrayList<Card>(); 

     for (int i = 0; i < TOTAL_CARDS; i++) { 


      MaterialLargeImageCard card = new MaterialLargeImageCard(this); 
      //card.setInnerLayout(R.layout.native_material_largeimage_text_card); 
      card.setTextOverImage("Italian Beaches"); 
      card.setDrawableIdCardThumbnail(R.drawable.card_background_01); 

      //Set the title and subtitle in the card 
      card.setTitle("This is my favorite local beach"); 
      card.setSubTitle("A wonderful place"); 

      // Set supplemental actions 
      TextSupplementalAction t1 = new TextSupplementalAction(this, R.id.action1); 
      t1.setOnActionClickListener(new BaseSupplementalAction.OnActionClickListener() { 
       @Override 
       public void onClick(Card card, View view) { 
        Toast.makeText(AboutActivity.this, " Click on Text SHARE ", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      card.addSupplementalAction(t1); 

      //Set the layout for supplemental actions 
      card.setLayout_supplemental_actions_id(R.layout.about_card_supplemental_actions); 

      //Very important call: build the card 
      card.build(); 
      cards.add(card); 

     } 

     return cards; 
    } 

    private void updateAdapter(ArrayList<Card> cards) { 
     if (cards != null) { 
      mCardArrayAdapter.addAll(cards); 
     } 
    } 

    class LoaderAsyncTask extends AsyncTask<Void, Void, ArrayList<Card>> { 

     LoaderAsyncTask() { 
     } 

     @Override 
     protected ArrayList<Card> doInBackground(Void... params) { 
      //elaborate images 
      //SystemClock.sleep(1000); //delay to simulate download, don't use it in a real app 

      ArrayList<Card> cards = initCard(); 
      return cards; 

     } 

     @Override 
     protected void onPostExecute(ArrayList<Card> cards) { 
      //Update the adapter 
      updateAdapter(cards); 
      //displayList(); 
     } 
    } 
} 

ОБНОВЛЕНИЕ:

material_card.xml:

<it.gmariotti.cardslib.library.view.CardViewNative 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/list_cardId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    style="@style/native_recyclerview_card.base" 
    card:card_layout_resourceID="@layout/native_material_largeimage_text_card"/> 

В макета XML:

<it.gmariotti.cardslib.library.recyclerview.view.CardRecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/myCardList" 
     card:list_card_layout_resourceID="@layout/material_card" /> 

Внутри цикла: Для

ArrayList<BaseSupplementalAction> actions = new ArrayList<BaseSupplementalAction>(); 

      // Set supplemental actions 
      TextSupplementalAction t1 = new TextSupplementalAction(this, R.id.action1); 
      t1.setOnActionClickListener(new BaseSupplementalAction.OnActionClickListener() { 
       @Override 
       public void onClick(Card card, View view) { 
        Toast.makeText(AboutActivity.this," Click on Text SHARE "+card.getTitle(),Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      actions.add(t1); 



      //Create a Card, set the title over the image and set the thumbnail 
      MaterialLargeImageCard card = 
        MaterialLargeImageCard.with(this) 
          .setTextOverImage("Italian Beaches "+i) 
          .setTitle("This is my favorite local beach "+i) 
          .setSubTitle("A wonderful place") 
          .useDrawableId(R.drawable.card_background_01) 
          .setupSupplementalActions(R.layout.about_card_supplemental_actions, actions) 
          .build(); 

      card.setOnClickListener(new Card.OnCardClickListener() { 
       @Override 
       public void onClick(Card card, View view) { 
        Toast.makeText(AboutActivity.this," Click on ActionArea ",Toast.LENGTH_SHORT).show(); 
       } 
      }); 

      card.build(); 
      cards.add(card); 

UPDATE 2

После выполнения некоторых экспериментов я имею в виду, что это может быть виновником

<it.gmariotti.cardslib.library.recyclerview.view.CardRecyclerView 
     android:id="@+id/myCardList" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingTop="10dp" 
     card:list_card_layout_resourceID="@layout/material_card" /> 

Вот даже если я переименовать material_card к чему-то другому он компилирует просто отлично. Я думаю, что «card: list_card_layout_resourceID =« @ layout/material_card »« как-то не срабатывает.

UPDATE 3

Наконец решил. Проблема заключалась в объявлении xml. По ошибке я скопировал это неправильно. xmlns: card = "http://schemas.android.com/apk/res-auto" верна одна

Большое спасибо за помощь @Gabriele. Эта библиотека просто качается :)

+0

Simplycity будет использовать новую карту lib из google! легко реализовать! –

+0

@twntee Yaa, но эта библиотека слишком крутая, чтобы ее игнорировать. Я использую с v1.7 –

+0

раз, чтобы смотреть в будущее приятель! –

ответ

4

Вы можете найти пример здесь:

https://github.com/gabrielemariotti/cardslib/blob/dev/demo/stock/src/main/java/it/gmariotti/cardslib/demo/fragment/nativeview/NativeRecyclerViewMaterialCardFragment.java

Ваш вопрос макет. Ваш RecyclerView использовать этот макет карты: карта: list_card_layout_resourceID = "@ макет/native_recyclerview_card_layout"

Вы должны использовать макет карты с material_card_layout.

Пример (макет, используемый в примере выше): https://github.com/gabrielemariotti/cardslib/blob/dev/demo/stock/src/main/res/layout/native_recyclerview_material_card_layout.xml

Кроме того, я предлагаю вам с помощью строителя вместо стандартного конструктора для вашей карты.

Обратите внимание. Существует ошибка, которую я изучаю: https://github.com/gabrielemariotti/cardslib/issues/361

+0

Я обновил изменения, но все еще не смог увидеть материальные карты. Я вижу только основные карты. Я обновил изменения в редактировании. Все, что я делаю неправильно? Большое спасибо за помощь. –

+0

Возможно, виновником является карточка: list_card_layout_resourceID = "@ layout/material_card". Пожалуйста, ознакомьтесь с обновлением 2. –

+2

Решил проблему. Обновлено сообщение. Спасибо тонну :) –

Смежные вопросы