2012-06-12 5 views
0
.

. Я пытаюсь создать список, получающий помеченный список элементов для указания статуса для пользователя. Я смог создать отображение флага с помощью желтого фона (см. Снимок внизу). В Теории в списке с флагом может быть много помеченных элементов. Однако в моем приложении показаны только первые три флага. Я считаю, что это потому, что они изначально обращены к экрану. Флагированный фон, который не, нарисованный первоначально на экране, не отображается. Я хотел бы знать, как отобразить оставшиеся флаги в списке.getView показывает только отмеченные фоны для обрамленных просмотров. Он не показывает отмеченный фон при прокрутке для просмотра большего количества элементов в списке.

ListView Recycling: Фоновые рисунки в спискеView перерабатываются в getView(). Эта рециркуляция идет от позиции 0 до позиции 9. У меня есть флаги, которые должны совпадать в положениях 13, 14 и так далее. Эти позиции не отображаются.

listView.getCheckedItemPositions() для нескольких выборов: Этот метод не будет работать в моем случае, потому что пользователь не будет выбирать флаги. Флаги поступают с сервера.

setNotifyOnChange() и/или общественная виртуальная недействительным SetNotifyOnChange (BOOL notifyOnChange): Я не добавлять новые данные в список, так что я не вижу, как этот метод будет работать для моей программы. Предоставляет ли этот метод доступ к getview, когда он перерабатывает данные? Я не смог найти ответ на это в своих исследованиях.

public void registerDataSetObserver: Это может быть излишним для моей проблемы, но возможно ли иметь объект-наблюдатель, который отслеживает все позиции в списке моих элементов и в моем списке флагов, независимо от того, пересматривается ли представление и сопоставить их на экране?

flagged backgrounds from server http://www.leobee.com/android/push/so/flag.jpg

Код:

package com.convention.notification.app; 

import java.util.Iterator; 
import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.text.Html; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.ViewParent; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

public class NewsRowAdapter extends ArrayAdapter<Item> { 

    private Activity activity; 
    private List<Item> items; 
    private Item objBean; 
    private int row; 
    private List<Integer> disable; 
    View view ; 
    int disableView; 

    public NewsRowAdapter(Activity act, int resource, List<Item> arrayList, List<Integer> disableList) { 
     super(act, resource, arrayList); 
     this.activity = act; 
     this.row = resource; 
     this.items = arrayList; 
     this.disable=disableList; 

     System.out.println("results of delete list a:"+disable.toString()); 

    } 

    public int getCount() { 
     return items.size();   
    } 
    public Item getItem(int position) { 
     return items.get(position); 
    } 
    public long getItemId(int position) { 
     return position; 
    } 


     @Override 
     public int getItemViewType(int position) { 

     for(int k =0;k < disable.size();k++){ 
      if(position==disable.get(k)){ 

      //System.out.println("is "+position+" value of disable "+disable.get(k)); 
       disableView=disable.get(k); 

       //AdapterView.getItemAtPosition(position); 
      } 

     } 



    return position; 
} 

      @Override 
      public View getView(final int position, View convertView, ViewGroup parent) { 
       View view = convertView; 
       ViewHolder holder; 

       if (view == null) { 
        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        view = inflater.inflate(row, null); 

        getItemViewType(position); 
        long id=getItemId(position); 


        if(position==disableView){ 
         view.setBackgroundColor(Color.YELLOW); 
         System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView); 


         }else{ 
          view.setBackgroundColor(Color.WHITE); 
          System.out.println(" background set to white at position "+position +" disableView is at "+disableView); 

          } 


        //ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge; 
        holder = new ViewHolder(); 

        /* setTag Sets the tag associated with this view. A tag can be used to 
        * mark a view in its hierarchy and does not have to be unique 
        * within the hierarchy. Tags can also be used to store data within 
        * a view without resorting to another data structure. 

     */ 
        view.setTag(holder); 
       } else { 

        //the Object stored in this view as a tag 
        holder = (ViewHolder) view.getTag(); 
       } 

       if ((items == null) || ((position + 1) > items.size())) 
        return view; 

       objBean = items.get(position); 


     holder.tv_event_name = (TextView) view.findViewById(R.id.tv_event_name); 
     holder.tv_event_date = (TextView) view.findViewById(R.id.tv_event_date); 
     holder.tv_event_start = (TextView) view.findViewById(R.id.tv_event_start); 
     holder.tv_event_end = (TextView) view.findViewById(R.id.tv_event_end); 
     holder.tv_event_location = (TextView) view.findViewById(R.id.tv_event_location); 


     if (holder.tv_event_name != null && null != objBean.getName() 
       && objBean.getName().trim().length() > 0) { 
      holder.tv_event_name.setText(Html.fromHtml(objBean.getName())); 

     } 
     if (holder.tv_event_date != null && null != objBean.getDate() 
       && objBean.getDate().trim().length() > 0) { 
      holder.tv_event_date.setText(Html.fromHtml(objBean.getDate())); 
     } 
     if (holder.tv_event_start != null && null != objBean.getStartTime() 
       && objBean.getStartTime().trim().length() > 0) { 
      holder.tv_event_start.setText(Html.fromHtml(objBean.getStartTime())); 
     } 
     if (holder.tv_event_end != null && null != objBean.getEndTime() 
       && objBean.getEndTime().trim().length() > 0) { 
      holder.tv_event_end.setText(Html.fromHtml(objBean.getEndTime())); 
     } 
     if (holder.tv_event_location != null && null != objBean.getLocation() 
       && objBean.getLocation().trim().length() > 0) { 
      holder.tv_event_location.setText(Html.fromHtml(objBean.getLocation())); 

     } 


     return view; 
    } 

    public class ViewHolder { 
     public TextView 
     tv_event_name, 
     tv_event_date, 
     tv_event_start, 
     tv_event_end, 
     tv_event_location 
     /*tv_event_delete_flag*/; 


    } 


} 

Logcat:

06-12 20:54:12.058: I/System.out(493): item disalbed is at postion :0 
06-12 20:54:12.058: I/System.out(493): item disalbed is at postion :4 
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :5 
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :13 
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :14 
06-12 20:54:12.069: I/System.out(493): item disalbed is at postion :17 
06-12 20:54:12.069: I/System.out(493): results of delete list :[0, 4, 5, 13, 14, 17] 
06-12 20:54:12.069: I/System.out(493): results of delete list a:[0, 4, 5, 13, 14, 17] 
06-12 20:54:12.069: I/System.out(493): set adapaer to list view called; 
06-12 20:54:12.128: I/System.out(493): background set to yellow at position 0 disableView is at 0 
06-12 20:54:12.628: I/System.out(493): background set to white at position 1 disableView is at 0 
06-12 20:54:12.678: I/System.out(493): background set to white at position 2 disableView is at 0 
06-12 20:54:12.708: I/System.out(493): background set to white at position 3 disableView is at 0 
06-12 20:54:12.738: I/System.out(493): background set to yellow at position 4 disableView is at 4 
06-12 20:54:12.778: I/System.out(493): background set to yellow at position 5 disableView is at 5 
06-12 20:54:12.808: I/System.out(493): background set to white at position 6 disableView is at 5 
06-12 20:54:12.838: I/System.out(493): background set to white at position 7 disableView is at 5 

Это ссылка на мой первый вопрос дня назад:

Change Background on a specific row based on a condition in Custom Adapter

Я ценю вашу помощь!

ответ

0

Хорошо, ответ состоял в том, что мне пришлось повторить код вне поля if (view == null) в разделе else.

if (view == null) { 
        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        view = inflater.inflate(row, null); 

        getItemViewType(position); 
        long id=getItemId(position); 


        if(position==disableView){ 
         view.setBackgroundColor(Color.YELLOW); 
         System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView); 


         }else{ 
          view.setBackgroundColor(Color.WHITE); 
          System.out.println(" background set to white at position "+position +" disableView is at "+disableView); 

          } 


        //ViewHolder is a custom class that gets TextViews by name: tvName, tvCity, tvBDate, tvGender, tvAge; 
        holder = new ViewHolder(); 

        /* setTag Sets the tag associated with this view. A tag can be used to 
        * mark a view in its hierarchy and does not have to be unique 
        * within the hierarchy. Tags can also be used to store data within 
        * a view without resorting to another data structure. 

     */ 
        view.setTag(holder); 
       } else { 

        getItemViewType(position); 
        long id=getItemId(position); 


        if(position==disableView){ 
         view.setBackgroundColor(Color.YELLOW); 
         System.out.println(" background set to yellow at position "+position +" disableView is at "+disableView); 


         }else{ 
          view.setBackgroundColor(Color.WHITE); 
          System.out.println(" background set to white at position "+position +" disableView is at "+disableView); 

          } 

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

  • Нет связанных вопросов^_^