2016-01-11 5 views
0

Я пытался понять процесс и реализацию RecyclerView. У меня есть данные в курсоре, поэтому я изменил код, насколько я мог его переносить, потому что я новичок в программировании и разработке. Поэтому я попробовал и вот код. Но ничего не происходит.RecyclerView с курсором

public class MyContactsRecyclerViewAdapter extends RecyclerView.Adapter<MyContactsRecyclerViewAdapter.ViewHolder> { 

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

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
while(cursor.movetoNext()){ 
     String nam = cursor.getString(cursor.getColumnIndex(mDatabase.Tableinfo.Contacts_name)); 
     String phon = cursor.getString(cursor.getColumnIndex(mDatabase.Tableinfo.Contacts_phone)); 
     byte[] b = cursor.getBlob(cursor.getColumnIndex(mDatabase.Tableinfo.Contact_pic)); 
     holder.name.setText(nam); 
     holder.phone.setText(phon); 
    if (b==null) { 
     Profile bla = new Profile(); 
    holder.pic.setImageBitmap(bla.getRoundedShape(BitmapFactory.decodeResource(Resources.getSystem(), R.drawable.samplepro),60,60)); 
    } else { 
    holder.pic.setImageBitmap(BitmapFactory.decodeByteArray(b,0,b.length)); 
    } 
    } 
} 
@Override 
public int getItemCount() { 
    if(cursor != null){ 
    return cursor.getCount();} 
    return 0 ; 
} 


public class ViewHolder extends RecyclerView.ViewHolder { 
    public final View mView; 
    public TextView name; 
    public TextView phone; 
    public ImageView pic; 

    public ViewHolder(View view) { 
     super(view); 
     mView = view; 
     pic = (ImageView) view.findViewById(R.id.image); 
     phone = (TextView) view.findViewById(R.id.phone); 
     name = (TextView)view.findViewById(R.id.name); 
    } 
}} 

и в основной деятельности .....

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_contacts_list, container, false); 
    DataBaseOperations hell = new DataBaseOperations(getActivity()); 
    SQLiteDatabase db = hell.getReadableDatabase(); 
    String[] columns = {mDatabase.Tableinfo.ID,mDatabase.Tableinfo.Contacts_phone,mDatabase.Tableinfo.Contacts_name,mDatabase.Tableinfo.Contact_pic}; 
    Cursor Contacts = db.query(mDatabase.Tableinfo.contacts, columns, null, null, null, null, null); 
     LinearLayoutManager llv = new LinearLayoutManager(getContext()); 
     llv.setOrientation(LinearLayoutManager.VERTICAL); 
     contacts.setLayoutManager(llv); 
     MyContactsRecyclerViewAdapter lv = new  MyContactsRecyclerViewAdapter(Contacts); 
     contacts.setAdapter(lv); 

      return view; 
} 
+0

ничего не происходит, что это значит? – starkshang

+0

Предполагается показать вертикальный список, который я думаю. @FireSun –

+0

попытайтесь зарегистрировать результат 'getCount()', возможно, он вернет 0. – starkshang

ответ

0
private Cursor cursor; 
private View view; 
public MyContactsRecyclerViewAdapter(Cursor cur){ 
    cur = cursor; 
} 

дворняжка = курсор; не подходит. Является ли ошибка копирования или ваш код не работает, потому что вы неправильно обновляете курсор переменной?

Эта строка должна быть cursor=cur;

+0

Спасибо. но все еще не работает. –

+0

Еще одна большая проблема, которую я вижу в том, что вы пытаетесь использовать курсор внутри адаптера. Вы должны попытаться использовать Список onBindViewHolder дает вам один вид для одного элемента вашего списка (курсор в этом случае), вы пытаетесь обновить все элементы, что неправильно. Вы должны использовать cursor.getItemByIndex (position) (если этот метод существует) и обновить представление этими данными. – josealfonsomora