2015-03-27 3 views
0

Я использую собственный шаблон CursorAdapter и ViewHolder, я хочу знать, как хранить данные для каждой строки.Как сохранить данные для каждой строки в пользовательском CursorAdapter

Например, сохранение избранных значение (истина или ложь)

Мой ViewHolder:

private static class ViewHolder { 
     int column_id, column_gtext, column_isfav, column_isread; 
     TextView tvText; 
     ImageView btnFavorites;   
     boolean changeDefaultFav; // if btnFav clicked its change 
    } 

Мой NewView:

@Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     //return null; 
     View view = LayoutInflater.from(context).inflate(R.layout.goftar_lr_default, parent, false); 
     ViewHolder holder = new ViewHolder(); 
     holder.tvText = (TextView)view.findViewById(R.id.goftar_text); 
     holder.btnFavorites = (ImageView)view.findViewById(R.id.bg_fav);    
     holder.tvText.setTypeface(font); 

     holder.column_id = cursor.getColumnIndexOrThrow("_id"); 
     holder.column_gtext = cursor.getColumnIndexOrThrow("gtext"); 
     holder.column_isfav = cursor.getColumnIndexOrThrow("isfav"); 
     holder.column_isread = cursor.getColumnIndexOrThrow("isread"); 

     holder.changeDefaultFav = false; 

     holder.tvGoftarText.setText(holder.tvGoftarText.getText() + "\n" + "Append NewView"); 


    view.setTag(holder); 
    return view; 
} 

Мой BindView:

@Override 
    public void bindView(final View view, Context context, final Cursor cursor) { 


     final ViewHolder holder = (ViewHolder)view.getTag(); 
     holder.tvText.setText(cursor.getString(holder.column_gtext)); 

     final int position = cursor.getPosition(); 

     holder.btnFavorites.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       int newValue = 1; 
       if(holder.changeDefaultFav == true) { 
        holder.changeDefaultFav = false; 
        newValue = 0; 
       } 

       cursor.moveToPosition(position);  
       dh.openDatabase();      
       dh.updateFavorites(cursor.getInt(holder.column_id), newValue); 
       dh.close(); 
      } 
     }); 

Пожалуйста Помоги мне, большое спасибо :)

+1

«хранить данные», что вы подразумеваете под этим? для чего вам нужен ViewHolder? – pskink

+0

@pskink, я хочу, когда «updateFavorites» называется логической переменной, которая зависит от текущей строки к true или false. – Online98

ответ

1

Цель ViewHolder - предоставить вам быстрый доступ к подзонам внутри представления, поэтому вы вызываете только findViewById() при создании представления.

Вы назначаете значения модели (от курсора) в ViewHolder в newView(). Это вызовет проблемы, потому что, когда ваше представление переработано, newView() не будет вызываться, только bindView(). Поэтому вы должны прочитать данные своего курсора в пределах bindView().

Вы спрашиваете, как сохранить данные для каждой строки в пользовательском CursorAdapter? Данные уже хранятся в курсоре, поэтому все, что вам нужно сделать, это переместить эти данные из курсора в представления. ViewHolder только позволяет настроить вид так, доступ к вещам, как TextView и т.д. очень быстро [по сравнению с findViewById()]

Вы должны удалить все поля столбцов из ViewHolder и присвоить значение данных курсора TextView ы и т.д. в bindView().

Посмотрите еще несколько учебников, чтобы лучше понять, как работает переработка вида в ListView.

+0

«ViewHolder просто помогает вам настроить представление, поэтому доступ к таким вещам, как TextView и т. Д. Очень быстр [по сравнению с findViewById()]», это миф, в 95% случаев владелец списка бесполезен, см. Http: // daniel-codes.blogspot.com/2013/11/is-findviewbyid-slow.html, кстати, адаптеры google не используют шаблон держателя вида – pskink

+0

Ummm ... https://developer.android.com/reference/android/support/ v7/widget/RecyclerView.ViewHolder.html –

+0

Хотя я согласен, что это не огромная оптимизация. Я не использую шаблон много, и я не замечаю никакого удара по производительности. По-видимому, ОП нуждалась в помощи, понимая, для чего это было. –

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