2016-04-07 16 views
0

Bu kılavuzu kullanarak geçen günlerde ilk Android uygulamamı geliştiriyorum: Google'dan Material Design Guide.Karo Parçası, farklı fayanslarda farklı içerikler nasıl edinebilirim?

Döşeme parçaları için seçimim olarak gitmeye karar verdim, ancak sorun şu ki bu karolardaki içerik statik/kiremit 1'deki içerik 2, 3, 4 vb. Ile aynıdır. Her bir döşemenin benzersiz içeriğe sahip olması için bunu nasıl değiştiririm?

Herhangi bir yardım çok takdir edilecektir!

cevap

0

Normalde bu döşemeli liste biçiminde sunmak isteyeceğiniz bazı verileriniz olur. Bu, normalde ContentAdapter'a aktarılır, böylece her bir döşemeyi doldurmak için kullanabilirsiniz. Dakikada tüm içerik, adaptörünüzde değil, XML'de ayarlanır.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?android:attr/selectableItemBackground" 
    android:padding="@dimen/tile_padding"> 

    <ImageView 
     !--Add the id for the ImageView--> 
     android:id="@+id/tile_image" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/tile_height" 
     android:scaleType="centerCrop" 
     android:src="@drawable/paris" /> 

    ... 
</RelativeLayout> 

Sonra biz ele alabilmeleri TileContentFragment yılında ViewHolder sınıfını değiştirmek gerekir:

Eğer item_tile düzenine id niteliği eklemeniz gerekir her biri için görüntüleri değiştirmek isterseniz

ve TextView, item_tile düzeninde.

public static class ViewHolder extends RecyclerView.ViewHolder { 

    ImageView tileImage; 
    TextView tileTitle; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     this.tileImage = (ImageView) itemView.findViewById(R.id.tile_image); 
     this.tileTitle = (TextView) itemView.findViewById(R.id.tile_title); 
    } 
} 

Sonra sadece örnek amaçlı "Merhaba" her karoların başlığını ayarlamak sağlar: Bu yardımcı olur

public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> { 

    Other class methods... 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tile, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.tileTitle.setText("Hello"); 
     //If you had images for the different tile you could set them here too 
     //holder.tileImage.setImageResource([THE ID OF YOUR IMAGE HERE]) 
    } 
} 

Umut.

+0

Teşekkürler! Ben bunu denedim ve –

+0

QUESTION # 1 yaptığınızda rapor vereceğim. "TileTitle" olduğu gibi "TextView tileTitle" olması gereken "public static class ViewHolder .." içinde "TextView tileText" değil = (TextView) tileItem.findViewById ... aşağıdaki "public ViewHolder (LayoutInflater ..)" in "? /// Uygulamayı çalıştırırken bir çift hatam da var: HATA # 1:" Ortak ViewHolder() içinde { hata: ViewHolder sınıfındaki ViewHolder yapıcısı, verilen türlere uygulanamaz; gerekli: Görünüm bulundu: hayır argümanlar nedeni: fiili ve resmi argüman listeleri boyunda farklılık " //// HATA # 2: Ayrıca" kamu ViewHolder() { "hata: super çağrı ilk deyim olmalıdır kurucuda " –

+0

Evet, değişken isimde haklısın, tarayıcıda yapıyordum, böylece hatalar için bir şans vardı! –

İlgili konular