2013-11-29 3 views
0

у меня есть собственный адаптер курсора, который извлекает дату из базы данных и заполнения списка, и его onlistItemClick слушатель я показать вид, прикрепленный к этой строке, а затем скрыть эту точку зрения, нажав на него снова,
все работает нормально, но у меня две проблемы:
1) - у меня есть 10 строк, это показывает 10, но когда я записываю позиции, это дает мне только те позиции, которые подходят для экрана.
2) - когда я нажимаю на строке, вид кажется, что прилагается к этой строке, но когда я прокрутите вниз, я нашел другой вид виден вниз по экрану,пользовательского адаптер курсора неправильного положения

вот мой адаптер,

public class CustomCursorAdapter extends CursorAdapter { 
    private LayoutInflater mInflater; 

    public CustomCursorAdapter(Context context, Cursor cursor, int flags) { 
     super(context, cursor, flags); 
     mInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public void bindView(View view, final Context context, final Cursor cursor) { 
     TextView textView = (TextView) view.findViewById(R.id.txtview); 
     textView.setText(cursor.getString(cursor.getColumnIndex("text"))); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     //in that "list_layout.xml" i made a view that has to show and hide on click listener 
     View rowView = mInflater.inflate(R.layout.list_layout, parent, false); 
     if(cursor.getPosition()%2 != 0) 
     { 
      rowView.setBackgroundResource(R.drawable.list_selector); 
     } 
     return rowView; 
    } 
} 

Я работаю от часов, чтобы выяснить проблему, но напрасно.
Пожалуйста, помогите любому воспитателю.

+0

жаль я couldnnt понимаю ваш 2-й выпуск .. Вы можете уточнить это? –

+0

он отлично работает для строк, которые подходят на экране, как я уже сказал, но когда я прокручиваю вниз, log doew не дает новых позиций нравится, если на экране появляется 5 записей, это даст 0-4 , когда я прокручу вниз, он начинается с 0 снова .. –

+0

что вы на самом деле хотите достичь? –

ответ

0

Ответ на вопрос 1: Android инициализирует строки, которые вписываются в экран в заданное время, а не все из них сразу для проблем с производительностью.

Ответ на вопрос 2: попробуйте обеспечивая положение еще так:

if(cursor.getPosition()%2 != 0) 
{ 
    rowView.setBackgroundResource(R.drawable.list_selector); 
} 
else 
{ 
    rowView.setBackgroundResource(R.deawable.whatever); // your view for even number rows 
} 
0

Попробуйте написать метод GetView вместо этого.

Например:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) 
      convertView = mInflater 
        .inflate(R.layout.list_layout, parent, false); 
     if (getCursor().getPosition() % 2 != 0) { 
      convertView.setBackgroundResource(R.drawable.list_selector); 
     }else{ 

      convertView.setBackgroundResource(<-Something->); 
     } 
     return convertView; 

    } 

EDIT

@Override 
    public void bindView(View view, final Context context, final Cursor cursor) { 
     TextView textView = (TextView) view.findViewById(R.id.txtview); 
     textView.setText(cursor.getString(cursor.getColumnIndex("text"))); 
     if(cursor.getPosition()%2 != 0) 
     { 
      view.setBackgroundResource(R.drawable.list_selector); 
     } 
    } 
+0

Я удалил метод newview() и использовал ваш, он дал мне ошибку, чтобы добавить unimplemented метод newview(), я добавил, что метод по умолчанию, а затем getview() не вызывает –

+0

Затем попробуйте переместить этот код: if (cursor.getPosition()% 2! = 0) { rowView.setBackgroundResource (R.drawable.list_selector); } Для привязкиView также –

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