Изменить изображение при щелчке в динамическом Linear-Layout в адаптере

Не могли бы вы сказать мне, как я могу изменить изображение моего динамически созданного линейного макета с помощью v.gettag(). Я думаю, мне нужно использовать другой viewHolder для хранения элементов внутри LinearLayout. Пожалуйста, посмотрите на приведенный ниже фрагмент кода моего класса адаптера.

вот кусок кода: -

viewHolder.imgView.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					viewHolder.lnrLayout.setVisibility(View.VISIBLE);
					viewHolder.imgView.setVisibility(View.GONE);
					for (int i = 0; i < mList.size(); i++) {
						// TODO creation of buttons and image-views and views
						testText = new TextView(activity);
						testText.setText("TestData");
						mview = new View(activity);

						mImageView = new ImageView(activity);
						mImageView.setImageDrawable(activity.getResources()
								.getDrawable(R.drawable.check));
						mImageView.setPadding(5, 5, 5, 5);
						// TODO Linear-Layout in which they all are binded.
						linearlayout = new LinearLayout(activity);
						linearlayout.setOrientation(LinearLayout.HORIZONTAL);
						LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
								LinearLayout.LayoutParams.MATCH_PARENT,
								LinearLayout.LayoutParams.MATCH_PARENT);
						layoutParams.setMargins(5, 5, 5, 5);
						linearlayout.setLayoutParams(layoutParams);
						linearlayout.setBackground(activity.getResources()
								.getDrawable(R.drawable.background_shapes));
						// TODO setting their respective params.

						LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(
								0, LinearLayout.LayoutParams.MATCH_PARENT,
								0.23f);
						mImageView.setLayoutParams(imageParams);

						LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(
								0, LinearLayout.LayoutParams.MATCH_PARENT,
								0.01f);
						mview.setBackgroundColor(Color.WHITE);
						mview.setLayoutParams(viewParams);

						LinearLayout.LayoutParams TextParams = new LinearLayout.LayoutParams(
								0, LinearLayout.LayoutParams.MATCH_PARENT,
								0.85f);
						testText.setGravity(Gravity.CENTER);
						testText.setLayoutParams(TextParams);
						// TODO Adding to Dynamic Linear-layout.
						linearlayout.addView(testText);
						linearlayout.addView(mview);
						linearlayout.addView(mImageView);
						// TODO Adding to Main Linear-layout


						viewHolder.lnrLayout.addView(linearlayout);
						
								.indexOfChild(linearlayout);
						linearlayout.setTag(Integer.toString(idx));

						linearlayout.setOnClickListener(new OnClickListener() {

							@Override
							public void onClick(View v) {
								String idxStr = (String) v.getTag();
								Toast.makeText(activity, idxStr,
										Toast.LENGTH_SHORT).show();

							}
						});
					}
				}
			});

Второй подход: -

static class ViewHolder {
		TextView tvProductName;
		ImageView imgView;
		View viewRightLine;
		ScrollView scrlLstItems;
		LinearLayout lnrLayout;

	}

	static class InternalViewHolder {
		TextView tvProductName;
		ImageView imgViewProduct;
		View viewdivider;
		LinearLayout mLayout;

	}

	@Override
	public View getView(LayoutInflater inflater, ViewGroup parent) {
		final ViewHolder viewHolder;
		mView = inflater.inflate(R.layout.selector_item_compare, null);
		if (mView != null) {
			viewHolder = new ViewHolder();
			viewHolder.tvProductName = (TextView) mView
					.findViewById(R.id.tv_product);
			viewHolder.imgView = (ImageView) mView
					.findViewById(R.id.img_product);
			viewHolder.viewRightLine = (View) mView
					.findViewById(R.id.view_right_line);
			viewHolder.lnrLayout = (LinearLayout) mView
					.findViewById(R.id.lnr_test);
			viewHolder.tvProductName.setText(Name);
			viewHolder.imgView.setImageResource(Image);
			viewHolder.imgView.setOnClickListener(new OnClickListener() {

				@SuppressWarnings("unused")
				@Override
				public void onClick(View v) {
					viewHolder.lnrLayout.setVisibility(View.VISIBLE);
					viewHolder.imgView.setVisibility(View.GONE);
					for (int i = 0; i < mList.size(); i++) {
						InternalViewHolder holder = null;

						if (holder == null) {
							holder = new InternalViewHolder();
							holder.imgViewProduct = new ImageView(activity);
							holder.tvProductName = new TextView(activity);
							holder.viewdivider = new View(activity);
							holder.mLayout = new LinearLayout(activity);
							// TODO creation of buttons and image-views and
							// views

							holder.imgViewProduct.setImageDrawable(activity
									.getResources().getDrawable(
											R.drawable.check));
							holder.imgViewProduct.setPadding(5, 5, 5, 5);
							// TODO Linear-Layout in which they all are binded.

							holder.mLayout
									.setOrientation(LinearLayout.HORIZONTAL);
							LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
									LinearLayout.LayoutParams.MATCH_PARENT,
									LinearLayout.LayoutParams.MATCH_PARENT);
							layoutParams.setMargins(5, 5, 5, 5);
							holder.mLayout.setLayoutParams(layoutParams);
							holder.mLayout.setBackground(activity
									.getResources().getDrawable(
											R.drawable.background_shapes));
							// TODO setting their respective params.

							LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(
									0, LinearLayout.LayoutParams.MATCH_PARENT,
									0.23f);
							holder.imgViewProduct.setLayoutParams(imageParams);
							holder.imgViewProduct.setVisibility(View.GONE);

							LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(
									0, LinearLayout.LayoutParams.MATCH_PARENT,
									0.01f);
							holder.viewdivider.setBackgroundColor(Color.WHITE);
							holder.viewdivider.setLayoutParams(viewParams);
							holder.viewdivider.setVisibility(View.GONE);

							LinearLayout.LayoutParams TextParams = new LinearLayout.LayoutParams(
									0, LinearLayout.LayoutParams.MATCH_PARENT,
									0.85f);
							holder.tvProductName.setGravity(Gravity.CENTER);
							holder.tvProductName.setLayoutParams(TextParams);
							// TODO Adding to Dynamic Linear-layout.
							holder.mLayout.addView(holder.tvProductName);
							holder.mLayout.addView(holder.viewdivider);
							holder.mLayout.addView(holder.imgViewProduct);
							// TODO Adding to Main Linear-layout

							holder.tvProductName.setText(mCategories.get(i)
									.getName());

							viewHolder.lnrLayout.addView(holder.mLayout);
							viewHolder.lnrLayout.setTag(holder);
						} else {
							holder = (InternalViewHolder) viewHolder.lnrLayout
									.getTag();
						}

						// int idx = viewHolder.lnrLayout
						// .indexOfChild(holder.mLayout);
						// holder.mLayout.setTag(Integer.toString(idx));

						holder.mLayout
								.setOnClickListener(new OnClickListener() {

									@Override
									public void onClick(View v) {
										// String idxStr = (String) v.getTag();
										// Toast.makeText(activity, idxStr,
										// Toast.LENGTH_SHORT).show();
										holder.imgViewProduct
												.setVisibility(View.VISIBLE);
										holder.viewdivider
												.setVisibility(View.VISIBLE);

									}
								});
					}
				}
			});
			viewHolder.tvProductName.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					if (activity.getResources().getBoolean(
							R.bool.landscape_only)) {
						viewHolder.lnrLayout.removeAllViews();
						viewHolder.lnrLayout.setVisibility(View.GONE);
						viewHolder.imgView.setVisibility(View.VISIBLE);
					}

				}
			});
			mView.setTag(viewHolder);

		} else {
			viewHolder = (ViewHolder) mView.getTag();
		}
		return mView;
	}

Спасибо


person demo demo    schedule 01.09.2015    source источник
comment
возможно, ваш onClickListener не срабатывает. См.: stackoverflow.com/questions/6083641/   -  person Björn    schedule 01.09.2015
comment
Есть ли какая-либо ошибка в вашем LogCat?   -  person Skizo-ozᴉʞS    schedule 01.09.2015
comment
Привет, Skizo, нет, я не получаю никаких ошибок .... я просто спрашиваю, как я могу изменить изображение, поскольку я могу получить значение v.getTag () для каждого моего щелчка ... так есть ли какая-то причина? я могу изменить изображение этого конкретного элемента, по которому я нажимаю, используя его значение v.gettag().   -  person demo demo    schedule 01.09.2015


Ответы (1)


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

static class ViewHolder {
		TextView tvProductName;
		ImageView imgView;
		View viewRightLine;
		ScrollView scrlLstItems;
		LinearLayout lnrLayout;

	}

	static class InternalViewHolder {
		TextView tvProductName;
		ImageView imgViewProduct;
		View viewdivider;
		LinearLayout mLayout;

	}

	@Override
	public View getView(LayoutInflater inflater, ViewGroup parent) {
		final ViewHolder viewHolder;
		mView = inflater.inflate(R.layout.selector_item_compare, null);
		if (mView != null) {
			viewHolder = new ViewHolder();
			viewHolder.tvProductName = (TextView) mView
					.findViewById(R.id.tv_product);
			viewHolder.imgView = (ImageView) mView
					.findViewById(R.id.img_product);
			viewHolder.viewRightLine = (View) mView
					.findViewById(R.id.view_right_line);
			viewHolder.lnrLayout = (LinearLayout) mView
					.findViewById(R.id.lnr_test);
			viewHolder.tvProductName.setText(Name);
			viewHolder.imgView.setImageResource(Image);
			viewHolder.imgView.setOnClickListener(new OnClickListener() {

				@SuppressWarnings("unused")
				@Override
				public void onClick(View v) {
					viewHolder.lnrLayout.setVisibility(View.VISIBLE);
					viewHolder.imgView.setVisibility(View.GONE);
					for (int i = 0; i < mList.size(); i++) {
						final InternalViewHolder holder;

						holder = new InternalViewHolder();
						holder.imgViewProduct = new ImageView(activity);
						holder.tvProductName = new TextView(activity);
						holder.viewdivider = new View(activity);
						holder.mLayout = new LinearLayout(activity);
						// TODO creation of buttons and image-views and
						// views

						holder.imgViewProduct.setImageDrawable(activity
								.getResources().getDrawable(R.drawable.check));
						holder.imgViewProduct.setPadding(5, 5, 5, 5);
						// TODO Linear-Layout in which they all are binded.

						holder.mLayout.setOrientation(LinearLayout.HORIZONTAL);
						LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
								LinearLayout.LayoutParams.MATCH_PARENT,
								LinearLayout.LayoutParams.MATCH_PARENT);
						layoutParams.setMargins(5, 5, 5, 5);
						holder.mLayout.setLayoutParams(layoutParams);
						holder.mLayout.setBackground(activity.getResources()
								.getDrawable(R.drawable.background_shapes));
						// TODO setting their respective params.

						LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(
								0, LinearLayout.LayoutParams.MATCH_PARENT,
								0.23f);
						holder.imgViewProduct.setLayoutParams(imageParams);
						holder.imgViewProduct.setVisibility(View.GONE);

						LinearLayout.LayoutParams viewParams = new LinearLayout.LayoutParams(
								0, LinearLayout.LayoutParams.MATCH_PARENT,
								0.01f);
						holder.viewdivider.setBackgroundColor(Color.WHITE);
						holder.viewdivider.setLayoutParams(viewParams);
						holder.viewdivider.setVisibility(View.GONE);

						LinearLayout.LayoutParams TextParams = new LinearLayout.LayoutParams(
								0, LinearLayout.LayoutParams.MATCH_PARENT,
								0.85f);
						holder.tvProductName.setGravity(Gravity.CENTER);
						holder.tvProductName.setLayoutParams(TextParams);
						// TODO Adding to Dynamic Linear-layout.
						holder.mLayout.addView(holder.tvProductName);
						holder.mLayout.addView(holder.viewdivider);
						holder.mLayout.addView(holder.imgViewProduct);

						holder.tvProductName.setText(mCategories.get(i)
								.getName());
						// TODO Adding to Main Linear-layout
						viewHolder.lnrLayout.addView(holder.mLayout);
						viewHolder.lnrLayout.setTag(holder);

						int idx = viewHolder.lnrLayout
								.indexOfChild(holder.mLayout);
						holder.mLayout.setTag(Integer.toString(idx));

						holder.mLayout
								.setOnClickListener(new OnClickListener() {

									@Override
									public void onClick(View v) {
										// String idxStr = (String) v.getTag();
										// Toast.makeText(activity, idxStr,
										// Toast.LENGTH_SHORT).show();

										if (holder.imgViewProduct
												.getVisibility() == View.VISIBLE) {
											holder.imgViewProduct
													.setVisibility(View.GONE);
											holder.viewdivider
													.setVisibility(View.GONE);
										} else {
											holder.imgViewProduct
													.setVisibility(View.VISIBLE);
											holder.viewdivider
													.setVisibility(View.VISIBLE);
										}

									}
								});
					}
				}
			});
			viewHolder.tvProductName.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					if (activity.getResources().getBoolean(
							R.bool.landscape_only)) {
						viewHolder.lnrLayout.removeAllViews();
						viewHolder.lnrLayout.setVisibility(View.GONE);
						viewHolder.imgView.setVisibility(View.VISIBLE);
					}

				}
			});
			mView.setTag(viewHolder);

		} else {
			viewHolder = (ViewHolder) mView.getTag();
		}
		return mView;
	}

person sid    schedule 01.09.2015
comment
Привет, Сид, ты правильно понял мою точку зрения ... это то, что мне было нужно. Спасибо, чувак. - person demo demo; 01.09.2015