2015-10-12 3 views
2

Я показал ListView с помощью BaseAdapter. Я пытаюсь показать Layout, когда ImageView нажата на определенную строку. I.e, когда я нажимаю изображение в строке 1, макет должен быть видимым только в строке 1, а не в других строках ListView. Я ссылался на ссылку this, но когда я нажимаю на определенную строку, макет также отображается в других строках. Я сделал следующее кодирование. Может ли кто-нибудь помочь мне с этим.Невозможно отобразить макет только в одной строке списка в android

int prev=-1; 
@Override 
public View getView(final int position, View converView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View row = converView; 
    holder = null; 
    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (row == null) { 
     row = inflater.inflate(R.layout.mybag_row, parent, false); 
     holder = new ViewHolder(); 
     holder.tv_mybag_name = (TextView) row 
       .findViewById(R.id.tv_mybag_name); 
     holder.tv_prod_price = (TextView) row 
       .findViewById(R.id.tv_prod_price); 
     holder.tv_mybag_size = (TextView) row 
       .findViewById(R.id.tv_mybag_size); 
     holder.tv_delivery = (TextView) row.findViewById(R.id.tv_delivery); 
     holder.tv_mybag_price = (TextView) row 
       .findViewById(R.id.tv_mybag_price); 
     holder.imv_mybag_img = (ImageView) row 
       .findViewById(R.id.imv_mybag_img); 
     holder.imv_bag_preferences = (ImageView) row 
       .findViewById(R.id.imv_bag_preferences); 
     holder.lnr_dropdwn = (LinearLayout) row 
       .findViewById(R.id.lnr_dropdwn); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    Ion.with(holder.imv_mybag_img).placeholder(R.drawable.ic_launcher) 
      .error(R.drawable.ic_launcher) 
      .load(arr_mybag.get(position).getMybag_img_url()); 
    holder.tv_mybag_name.setText(arr_mybag.get(position).getMybag_name()); 
    Log.i("product name in bag", arr_mybag.get(position).getMybag_name()); 
    holder.lnr_dropdwn.setVisibility(View.GONE); 
    holder.imv_bag_preferences.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

      holder.lnr_dropdwn 
        .setVisibility(position == prev ? View.VISIBLE 
          : View.GONE); 
      prev = position; 
      notifyDataSetChanged(); 

     } 
    }); 

    return row; 
} 

static class ViewHolder { 
    TextView tv_mybag_name, tv_prod_price, tv_mybag_size, tv_delivery, 
      tv_mybag_price; 
    ImageView imv_mybag_img, imv_bag_preferences; 
    LinearLayout lnr_dropdwn; 

} 
+0

Вы пытались добавить 'holder.lnr_dropdwn.setVisibility()' 'вне OnClick()' для гм сброса мнения каждый раз. – hypd09

+0

@ hypd09 Я пробовал, но он не помогает – Tiny

+1

@ Ты пытаешься скрыть другую строку, кроме выбранной строки? –

ответ

1

Создать логическую переменную в классе Pojo в

private boolean isClicked; 
    public boolean isClicked() { 
     return isClicked; 
    } 

    public void setIsClicked(boolean isClicked) { 
     this.isClicked = isClicked; 
    } 

// Сделать это изменяет его GetView

if(isClicked()) 
    { 

      holder.lnr_dropdwn 
        .setVisibility(View.VISIBLE); 
    `} 
    else 
    { 

      holder.lnr_dropdwn 
        .setVisibility(View.GONE); 
    }` 
    holder.imv_bag_preferences.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 

arr_mybag.get(position).setIsClicked(true); 

notifydatasetchanged();

} 
}); 
+0

приветствуется .. !! взрыв –

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