Строки не обновляются при вызове Custom SimpleCursorAdapter - PullRequest
0 голосов
/ 13 декабря 2011

Я хотел иметь возможность отображать строки моего списка в разных цветах в зависимости от их типа.Поэтому я создал собственный адаптер с помощью приведенного ниже кода.

    startManagingCursor(cursor);
    Lectures_Adapter adapter = new Lectures_Adapter(this,R.layout.menu_item,cursor,FROM,TO);
    menuList.setAdapter(adapter);

пользовательский адаптер использует этот код -

public Lectures_Adapter(Context context, int layout, Cursor c, String[] from,int[] to) {
    super(context, layout, c, from, to);
    this.appContext=context;
    this.layout=layout;
    this.mycursor=c;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {     
    View view = super.getView(position, convertView, parent);   
    if (position > 0)
    {
        RelativeLayout rowFill = (RelativeLayout) convertView.findViewById(R.id.rowFill);
            String title = mycursor.getString(0);
            int myColor = 0;
            int myPos = title.indexOf("Nurse");
            int myPos2 = title.indexOf("masterclass");
            if (myPos >= 0)
            {
                myColor = Color.parseColor("#99FF66");
            }
            else if (myPos2  >= 0)
            {
                myColor = Color.parseColor("#FF99FF");
            }
            else
            {
                myColor = Color.parseColor("#FFFF66");
            }
            convertView.findViewById(R.id.rowFill).setBackgroundColor(myColor);                 
    }           
    return view;    
}

Все работает нормально и отображает строки в соответствующих цветах, ноПервая страница всегда остается неизменной (за исключением первой строки), и когда я выбираю строку и возвращаюсь к списку, изменения не применяются.Как я могу заставить Listview постоянно сохранять настройки пользовательских адаптеров?

Ответы [ 3 ]

0 голосов
/ 13 декабря 2011

Спасибо за ваш ответ, я поместил код в getView в соответствии с запросом, вот так -

    if (convertView == null) {
        LayoutInflater inflator = (LayoutInflater) this.appContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflator.inflate(this.layout,null);
        } else {
            convertView = (View) convertView;
        }

    return view;    

Я не уверен, куда поместить строку myListView.invalidateViews ();но на данный момент ситуация остается такой же, как Listview не обновляется

0 голосов
/ 13 декабря 2011

Попробуйте позвонить notifyDataSetChanged в списках adapter.Убедитесь, что вы делаете это в потоке пользовательского интерфейса.

0 голосов
/ 13 декабря 2011

сначала используйте этот код в методе getView:

if (convertView == null) {
        LayoutInflater inflator = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflator.inflate(R.layout.my_layout,null);
        } else {
            rowView = (View) convertView;
        }

используйте следующий код, где вы хотите применить свои изменения.

myListView.invalidateViews();

Редактировать:

put myListView.invalidateViews ();в ваших методах деятельности (UI).например в

    myListView.setOnItemClickListener(new OnItemClickListener() 
    { 
            @Override public void onItemClick(
                    AdapterView<?> parent, View view, int position, long id) { 
                    myListView.invalidateViews(); 
            } 
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...