2017-12-27 5 views
-1

私はリサイクルビューにリスト配列を設定しています。私はすでにString Arrayを試しています。私はそれをすべて間違っているか、私はarrayadapterを使用する必要がありますか?RecyclerViewにListArrayを設定する

もし私がそれをどうすればいいのですか?私はすでにarrayadapterにリストビューを設定していますが、私は海の真ん中にいるので、大きなものを試したくありません。私のrecyclerviewアダプタのコードは次のとおりです。

エラーは表示されません。ビューには配列の最後の項目が表示されます。

public class AudioRecycleViewAdapter extends 
RecyclerView.Adapter<RecyclerView.ViewHolder> { 
private List<String> values = Arrays.asList ("Al Feel","Al Humazah","Al 
Kausar","Al Maoon","Al Quresh","Dr Israr", 
     "Al Kafiroon","An Nasr","Al Lahab","Al Ikhlaas","Al Falaq","An 
Naas","Iman Part 1", 
     "Iman Part 2","Iman Part 3","Iman Part 4","Iman Part 5"); 

Context context; 
InterstitialAd mInterstitialAd; 
private int audiolayout; 
public TextView txtHeader; 
public TextView txtFooter; 
TextView txtarabic; 


public AudioRecycleViewAdapter(List<String> values, int audiolayout, Context context, InterstitialAd intAdView) throws IOException { 
    this.audiolayout = audiolayout; 
    this.context = context; 
    this.mInterstitialAd = intAdView; 
} 
public Context getContext() { 
    context = this.getContext(); 
    return context; 
} 

// Provide a reference to the views for each data item 
// Complex data items may need more than one view per item, and 
// you provide access to all the views for a data item in a view holder 
public class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public View layout; 

    public ViewHolder(View v) { 
     super(v); 
     layout = v; 
     txtHeader = (TextView) v.findViewById(R.id.audio_subtitle); 
     txtFooter = (TextView) v.findViewById(R.id.audio_title); 
     txtarabic = (TextView) v.findViewById(R.id.arabic_title); 
    } 
} 

public void add(int position, String item) { 
    values.add(position, item); 
    notifyItemInserted(position); 
} 

public void remove(int position) { 
    values.remove(position); 
    notifyItemRemoved(position); 
} 
// Create new views (invoked by the layout manager) 
@Override 
public AudioRecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
    // create a new view 
    LayoutInflater inflater = LayoutInflater.from(
      parent.getContext()); 

    View v = 
      inflater.inflate(R.layout.audio_row_layout, parent, false); 
    // set the view's size, margins, paddings and layout parameters 
    ViewHolder vh = new ViewHolder(v); 

    return vh; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    int x; 
    for(position =0; position < values.size(); position++) 
    { 
     txtHeader.setText(values.get(position)); 
     position++; 
    } 

} 

// Return the size of your dataset (invoked by the layout manager) 
@Override 
public int getItemCount() { 
    return values.size(); 
} 

} 
+0

エラーログを共有できますか? – R2R

+0

はエラーを表示していません...すべての行でリストの最後の項目を埋めること –

答えて

1

まず:あなただけtextHeaderで最後の値を表示するには、すべての要素を通過している:あなたのカスタマイズViewHolderので、この

extends RecyclerView.Adapter<AudioRecycleViewAdapter.ViewHolder> 

第二に、この

extends RecyclerView.Adapter<RecyclerView.ViewHolder> 

を変更AudioRecycleViewAdapterの内側に使用しますまた使用するholder.txtHeader

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     holder.txtHeader.setText(values.get(position)); 

} 

サード:アイテムのレイアウトビューの子ビュー、Pavneet_Singhの答えへの追加としてViewHolderので

public class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public View layout; 
    public TextView txtHeader; 
    public TextView txtFooter; 
    public TextView txtarabic; 

    public ViewHolder(View v) { 
     super(v); 
     layout = v; 
     txtHeader = (TextView) v.findViewById(R.id.audio_subtitle); 
     txtFooter = (TextView) v.findViewById(R.id.audio_title); 
     txtarabic = (TextView) v.findViewById(R.id.arabic_title); 
    } 
} 
+0

はすでにそのメソッドをオーバーライドしませんでした。エラーが発生しました –

+0

@ManzoorAhmadはい、古いメソッドのシグネチャのため古いメソッドを削除してスタジオは新しいシグネチャでメソッドをオーバーライドすると、 'onBindViewHolder'のパラメータとして' AudioRecycleViewAdapter.ViewHolder'が表示されます –

+0

私はそれを変更します。.. buddyに行きません,,, –

0

内にある必要があり、また、あなたのカスタムViewHolderにバインド()メソッドを追加し、RecyclerView項目に関連するデータをバインドすることができますこの方法では。物事が複雑になると、私はこのアプローチを単純なプロジェクトで使用しました。これは、将来のことができますアクションホルダーの項目リスナーに、さらにtextViewなどのように、プロパティをバインドholder年代を見つけることで問題を回避するために、あなたを助けるべき適切な使用と:

//adapter's inner 
class SomeClassViewHolder(val view: View) extends RecyclerView.ViewHolder(view) { 
    //here can be view initializing, like 
    txtHeader = (TextView) view.findViewById(R.id.audio_subtitle); 

    void bind(int position){ 
     // all view binding logic goes here, for example: 
     txtHeader.setText("someText"); 
    } 
} 

//and then in adapter 
@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     holder.bind(values.get(position)); 
} 

編集:それはこのように動作するはずです方法はbind()です。

関連する問題