2016-04-12 27 views
2

RecyclerView için bir Bağdaştırıcı kurmaya çalışın. "Note1" veri girişi toplamak DizeleriReccyclerView'ın onBindViewHolder'da nasıl ayarlanır?

holder.todo.setText(dbList.get(position).getTodo()); 
holder.note1.setText(dbList.get(position).getNote1()); 

"todo" ve edilir: "sembolünü çözülemiyor 'todo' ve 'Not 1'":

Android Studio Bu iki satır bir hata mesajı döndürür iki EditTexts üzerinden kullanıcı.

Ayrıca viewHolder bir hata gösteriyor: "Yerel değişken viewHolder gereksiz". Lütfen bunu önerin.

Tam ListAdaper.java

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import java.util.ArrayList; 
import java.util.List; 

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ListViewHolder> { 

List<DataModel> dbList = new ArrayList<>(); 
Context context; 
LayoutInflater mLayoutInflater; 

public ListAdapter(Context context, List<DataModel> dbList) { 
    this.context = context; 
    this.dbList = dbList; 
    mLayoutInflater = LayoutInflater.from(context); 
} 

@Override 
public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View convertView = mLayoutInflater.inflate(R.layout.singlecard_layout, parent, false); 
    ListViewHolder viewHolder = new ListViewHolder(convertView); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

     holder.todo.setText(dbList.get(position).getTodo()); 
     holder.note1.setText(dbList.get(position).getNote1()); 
} 

@Override 
public int getItemCount() { 
    return dbList.size(); 
} 

public class ListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public ListenerEditText todo,note1; 

    public ListViewHolder(View itemView) { 
     super(itemView); 

     todo = (ListenerEditText) itemView.findViewById(R.id.CEditText); 
     note1 = (ListenerEditText) itemView.findViewById(R.id.DEditText); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
    } 
    } 
} 

Tam DataModel.java

public class DataModel { 

private String todo; 
private String note1; 

public String getTodo() { 
    return todo; 
} 

public void setTodo(String todo) { 
    this.todo = todo; 
} 

public String getNote1() { 
    return note1; 
} 

public void setNote1(String note1) { 
    this.note1 = note1; 
}  

cevap

3

yapmanız gereken tek şey almaya onBindViewHolder() tanımını değiştirmek olduğunu yerine jenerik RecyclerView.ViewHolder sizin ListViewHolder türü: Altern

@Override 
public void onBindViewHolder(ListViewHolder holder, int position) { 

     holder.todo.setText(dbList.get(position).getTodo()); 
     holder.note1.setText(dbList.get(position).getNote1()); 
} 

Genel olarak, jenerik RecyclerView.ViewHolder'u kullanmaya devam edebilir ve ViewHolder türünüze yayınlayabilirsiniz. Yerel bir değişken gelince

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

     ListViewHolder listViewHolder = (ListViewHolder) holder; 

     listViewHolder.todo.setText(dbList.get(position).getTodo()); 
     listViewHolder.note1.setText(dbList.get(position).getNote1()); 
} 

uyarı "Yerel değişken gereksiz"

, sadece tek bir satıra bu pekiştirmek istediği yerine oluşturarak:

bir adaptör satırların farklı türde kullanılırken bu yaygındır
@Override 
public ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View convertView = mLayoutInflater.inflate(R.layout.abc_action_bar_title_item, parent, false); 
    return new ListViewHolder(convertView); 
} 

Ancak, bunun gerçekten işe yaramaz bir uyarı olduğuna dikkat edin, ancak kodu olduğu gibi tutup uyarıyı dikkate almam.

+0

seçicidir. Vay canına, ekrana çok uzun süre bakıyordum. Dizeleri referans verdiğim ListViewHolder'a özel yapın!Teşekkür ederim. viewHolder nesnesinin neden "Yerel değişken gereksiz" attığına dair herhangi bir düşünce var mı? – AJW

+0

Bu satır: "ListViewHolder viewHolder = new ListViewHolder (convertView);" – AJW

+0

Bu satırda tanımlanır ve sonraki satırda "viewHolder döndürür" ve dosyada yer alır. – AJW

0

(public static class ListViewHolder

sonra public void onBindViewHolder bu bir kamu sınıf ListViewHolder

yapmak RecyclerView.ViewHolder tutucu,

onBindViewHolder için

(ListAdapter.ViewHolder tutucu

kullanmanız gereken ViewHolder bu dışarı size yardımcı olur

umut onBindViewHolder üzerinde oluşturulan

+0

Tamam, deneyeceğim. "Ortak sınıf ListViewHolder genişletiyor mu değiştiriyorum ...?" ve public ListViewHolder onCreateViewHolder yöntemini değiştirmiyor mu? – AJW

+0

Evet, bu sınıfı public static olarak değiştirin ve onLindViewHolder parametresini değiştirin –

+0

Üzgünüz, kodu gönderemiyorum. hala düzgün nasıl yapılacağını bilmiyorum –