неправильное положение пользовательского адаптера курсора

у меня есть пользовательский адаптер курсора, который извлекает дату из базы данных и заполняет список, а его прослушиватель 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;
    }
}

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


person Irfan Ahmed    schedule 29.11.2013    source источник
comment
извините, я не мог понять вашу вторую проблему .. можете ли вы уточнить ее?   -  person Kailash Dabhi    schedule 29.11.2013
comment
он отлично работает для строк, которые помещаются на экране, как я уже сказал, но когда я прокручиваю вниз, журнал не дает новых позиций, например, если на экране появляется 5 записей, он дает 0-4, когда я прокручиваю вниз, он начинается с 0 опять..   -  person Irfan Ahmed    schedule 29.11.2013
comment
чего вы на самом деле хотите достичь?   -  person Kailash Dabhi    schedule 29.11.2013
comment
Где вы регистрируете эти номера строк?   -  person Talha Mir    schedule 29.11.2013
comment
в новом методе представления int position = cursor.getPosition(); Log.d(Позиция, + позиция);   -  person Irfan Ahmed    schedule 29.11.2013


Ответы (2)


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

Ответ на вопрос 2: попробуйте указать предложение else следующим образом:

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

Вместо этого попробуйте написать метод 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;

    }

РЕДАКТИРОВАТЬ

 @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);
        }
    }
person vipul mittal    schedule 29.11.2013
comment
я удалил метод newview() и использовал ваш, это дало мне ошибку при добавлении нереализованного метода newview(), я добавил этот метод по умолчанию, а затем getview() не вызывает - person Irfan Ahmed; 29.11.2013
comment
Затем попробуйте переместить этот код: if(cursor.getPosition()%2 != 0) { rowView.setBackgroundResource(R.drawable.list_selector); } Также для bindView - person vipul mittal; 29.11.2013