2015-01-13 4 views
0

Мне нужно установить цвет фона для посещения объекта (imageView строки listView).listView элемент изменения фона строки автоматически

Он отображает список элементов, если вы посетили (itemclick) в строке свой элемент backgroundColor, необходимо изменить. Для этого я использую sharedPreferences. А также отлаживать его (в отладке он показывает false). Но не знаю, почему первый элемент имеет зеленый цвет после первого элемента itemClick в любой строке списка.

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

     if(view == null) 
     { 
      view = inflater.inflate(R.layout.item_ads, parent, false); 
     } 

     final HashMap<String, String> map = list.get(position); 

     ImageView imageAd = (ImageView)view.findViewById(R.id.ad_image); 

     if(sessionManager.ItemVisited(position))// && position!=0)// && !sessionManager.getFirstRun()) 
     { 
      imageAd.setBackgroundColor(Color.GREEN); 
     } 

} 

SessionManager

public class SessionManager 
{  
    public static ArrayList<Boolean> listBoolTrain = new ArrayList<Boolean>(); 

    private int giftRemaining; 

    private SharedPreferences prefs; 

    // Editor for Shared preferences 
    Editor editor; 

    // Context 
    Context _context; 

    // Shared pref mode 
    int PRIVATE_MODE = 0; 


    // Sharedpref file name 
    private static final String PREF_NAME = "AndroidHivePref"; 

    public SessionManager(Context context) 
    { 
     this._context = context; 

     prefs = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 

     editor = prefs.edit(); 
    } 

    public void setNumberOfGits(int numberOfGifts) 
    { 
     editor.putInt("numberOfGifts", numberOfGifts); 

     editor.commit(); 
    } 

    public int getNumberOfGits() 
    { 
     int nog = prefs.getInt("numberOfGifts", -5); 

     return nog; 
    } 

    public void initializerBooleans(int arraySiz) 
    { 
     int arraySize = prefs.getInt("arraySize", 10); 

     for(int x = 0 ; x < arraySize; x++) 
     { 
      editor.putBoolean("Bool"+x, false); 

      editor.commit(); 
     } 
    } 

    public void setItemVisited(int x) 
    { 
     editor.putBoolean("Bool"+x, true); 

     editor.commit(); 
    } 

    public boolean isItemVisited(int x) 
    { 
     return prefs.getBoolean("Bool"+x, false); 
    } 

    public int getUnVisitedItemCount() 
    { 
     int count = 0; 

     int arraySize = prefs.getInt("arraySize", 10); 

     for(int x = 0 ; x < arraySize ; x++)// listBoolTrain.size(); x++) 
     { 
      boolean bol= prefs.getBoolean("Bool"+x, false); 

      if(!bol) 
      { 
       count++; 
      } 
     } 

     return count; 
    } 

    public void remainingGift() 
    { 
    } 

    public void setFirstRun(boolean status) 
    { 
     editor.putBoolean("firstrun", status); 

     editor.commit(); 
    } 

    public boolean getFirstRun() 
    { 
     return prefs.getBoolean("firstrun", true); 
    } 

    public void removeAllPreferences() 
    { 
     prefs.edit().clear().commit(); 
    } 

    public void removeKey(String keyName) 
    { 
     prefs.edit().remove(keyName).commit(); 
    } 

    public void showAll() 
    { 
     Map<String,?> keys = prefs.getAll(); 

     for(Map.Entry<String,?> entry : keys.entrySet()) 
     { 
      Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());    
     } 
    } 

    public void setArraySize(int boolSize) 
    { 
     editor.putInt("arraySize", boolSize); 

     editor.commit(); 

     initializerBooleans(boolSize); 
    } 

    public int getArraySize() 
    { 
     return prefs.getInt("arraySize", -1); 
    } 

    public boolean ItemVisited(int position) 
    { 
     return prefs.getBoolean("Bool"+position, false); 

    } 
} 

И ListView itemClicked ..

listView.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long arg3) 
    { 
     Log.e("TAG_ADS","Item Visited " + position); 

     sessionManager.setItemVisited(position); 

     view.findViewById(R.id.ad_image).setBackgroundColor(Color.BLUE); 

     final String appPackageName = arl.get(position).get("packageName"); //map.get("packageName"); // getPackageName() from Context or Activity object 

     Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+ appPackageName)); 

     startActivity(marketIntent); 

    } 
}); 

Я должен создать сеанс для посещенных ссылок. В listView у меня есть URL-адреса. Как только URL-адрес посещен, его backgroundColor необходимо заменить. Я пробовал несколько способов, но ничего не происходит. Как только я нажал на какой-либо элемент, цвет фона позиции 0 также изменился, так как это посещенная ссылка.

ответ

2

Вы устанавливаете цвет фона только зеленым. В следующий раз, когда вызывается getView, convertView будет своего рода копией, поэтому вам не нужно надувать его и делать findViewById, но цвет фона также уже установлен на зеленый. Если вы добавили оператор else, чтобы установить цвет в белый цвет (например), он будет работать.

if(sessionManager.ItemVisited(position))// && position!=0)// && !sessionManager.getFirstRun()) 
{ 
    imageAd.setBackgroundColor(Color.GREEN); 
} else { 
    imageAd.setBackgroundColor(Color.WHITE); 
} 
+0

Большое спасибо за ваше драгоценное время.^_ ^ – Nepster

0

Вы должны сделать что-то, как показано ниже: -

View rowView = convertView; 
    if (rowView == null) 
    { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.partner_list_element, null); 
     // configure view holder 
     ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.price = (TextView) rowView.findViewById(R.id.price); 
     viewHolder.header = (TextView) rowView.findViewById(R.id.header); 
     viewHolder.location = (TextView) rowView.findViewById(R.id.location); 
     viewHolder.space = (TextView) rowView.findViewById(R.id.space); 
     viewHolder.main_image = (ImageView) rowView.findViewById(R.id.main_image); 
     viewHolder.logo_image = (ImageView) rowView.findViewById(R.id.logo_image); 
     rowView.setTag(viewHolder); 
    } 

    // fill data 
    ViewHolder holder = (ViewHolder) rowView.getTag(); 

сделать ниже класса на адаптере

class ViewHolder { 
    public TextView header,location,space,price; 
    public ImageView main_image,logo_image; 
} 

ListView переработать его элемент, который почему вы обращенную проблему.

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