2015-11-06 3 views
0

Я новичок в android. У меня есть listView сАдаптер ListView с несколькими элементами, доступными для кликов

Image1 | Name | Image2 | Layout1 | Image3 

Когда я нажимаю на Image2, образ Image2 должен измениться и фон на Image1 должен измениться.

Проблема, с которой я столкнулся, состоит в том, что есть 3 видимых элемента в listview, нажав на изображение 1-го элемента, меняет вещи даже на изображении элемента 4t. Как решить эту проблему и какой подход следует использовать?

Я размещаю свой код ниже.

public class RecipeListAdapter extends BaseAdapter{ 

Context mContext; 
ArrayList<CategoryDetails> categoryDetails; 
View.OnClickListener clickListener; 

public RecipeListAdapter(Context mContext, ArrayList<CategoryDetails> categoryDetails) { 
    this.mContext = mContext; 
    this.categoryDetails = categoryDetails; 
} 

@Override 
public int getCount() { 
    return categoryDetails.size(); 
} 

@Override 
public Object getItem(int i) { 
    return categoryDetails.get(i); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(final int i, View convertView, ViewGroup viewGroup) { 

    ViewHolder holder = null; 

    LayoutInflater mInflater = (LayoutInflater) mContext 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.main_recycler_layout, null); 
     holder = new ViewHolder(); 
     holder.recipeImage = (ImageView) convertView.findViewById(R.id.recipe_img); 
     holder.chowImage = (ImageView) convertView.findViewById(R.id.chow_image); 
     holder.recipeText = (TextView) convertView.findViewById(R.id.recipe_txt); 
     holder.likeBasket = (TextView) convertView.findViewById(R.id.like_bsk); 
     convertView.setTag(holder); 
    } else 
     holder = (ViewHolder) convertView.getTag(); 

    holder.recipeText.setText(categoryDetails.get(i).getRecipeName()); 

    String imageUrl = Constants.BASE_URL + categoryDetails.get(i).getRecipeImage(); 
    Picasso.with(mContext) 
      .load(imageUrl) 
      .placeholder(R.drawable.category_default) 
      .into(holder.recipeImage); 

    holder.likeBasket.setText(categoryDetails.get(i).getBookmarkCount()); 
    holder.chowImage.setTag(i); 


final ViewHolder finalHolder = holder; 
    holder.chowImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      view.setVisibility(View.GONE); 
      finalHolder.likeBasket.setBackgroundColor(Color.parseColor("#000000")); 
     } 
    }); 

    return convertView; 
} 


class ViewHolder{ 
    ImageView recipeImage; 
    ImageView chowImage; 
    TextView recipeText; 
    TextView likeBasket; 
} 
} 
+0

Пожалуйста, покажите свой код. –

ответ

0

Без кода я полагаю, что вы видите, вид 1 переработанного в позиции 4. Поскольку только 3 пунктов видимы на любое время ...

Если это то, что это происходит, проблема это не инициализация вашего представления в вашем адаптере, когда «convertView» не является нулевым.

Редактировать: Держу пари, проблема заключается в окончательном конечном холле ViewHolder. Попробуйте вместо этого использовать «convertView» и разбив шаблон ViewHolder в этом случае, потому что у вас не будет проблем с производительностью при этом изменении.

holder.chowImage.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     view.setVisibility(View.GONE); 
     convertView.findViewById(R.id.like_bsk).setBackgroundColor(Color.parseColor("#000000")); 
    } 
}); 
Смежные вопросы