Как я могу получить идентификатор элемента в массиве imageView Android - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть массив представлений изображений, который генерируется динамически при запуске пользователем

, это код:

LinearLayout picLL = (LinearLayout) findViewById(R.id.cityInfoLN);
ImageView myImage = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//lp.add
lp.setMargins(32, 8, 32, 8);
myImage.setLayoutParams(lp);
myImage.setImageBitmap(bitmap1);
myImages[CityImageCount] = new ImageView(this);
myImages[CityImageCount].setId(CityImageCount);
myImages[CityImageCount] = myImage;
myImages[CityImageCount].setLayoutParams(lp);
myImages[CityImageCount].setImageBitmap(bitmap1);
myImages[CityImageCount].setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {

        LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
        final View v1 = inflater.inflate(R.layout.image_dialog, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setView(v1);

        Button btn = (Button) v1.findViewById(R.id.editBTN);
        final TextView editText = (TextView) v1.findViewById(R.id.textView);
        editText.setText("هل تريد تعديل أم حذف الصورة");
        builder.setCancelable(true);
        final AlertDialog alert = builder.create();
        alert.getWindow().setGravity(Gravity.CENTER);
        alert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        alert.show();
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view1) {
               // EditIndexs[]
              //  String name = v.getResources().getResourceName(v.getId());
               // String name2 = context.getString(v.getId());
             //   String name3 = getString(view1.getId());
              //  String name4 = getResources().getString(view1.getId());

                EditIndex = CityImageCount;
                int xxx = view1.getId();
                showFile5();
                alert.cancel();
            }
        });
    }
});
picLL.addView(myImages[CityImageCount]);

Моя проблема, когда пользователь нажимает на любой изизображения для редактирования или удаления.Как я могу узнать, какое изображение кликнуло?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Сначала , вы не правильно установили вид изображения с этим кодом.Это потому, что вы устанавливаете ImageView в массив дважды с другим ImageView (Пожалуйста, прочитайте комментарий в коде:

// You're creating a ImageView
ImageView myImage = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

lp.setMargins(32, 8, 32, 8);
myImage.setLayoutParams(lp);
myImage.setImageBitmap(bitmap1);

// You're setting a new ImageView to array
myImages[CityImageCount] = new ImageView(this);
// then you set the Id
myImages[CityImageCount].setId(CityImageCount);

// But then you discard it by setting the array item with myImage
// so you're discarding the id.
myImages[CityImageCount] = myImage;

Итак, вам нужно установить ImageView в массив следующим образом:

ImageView myImage = new ImageView(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

lp.setMargins(32, 8, 32, 8);
myImage.setLayoutParams(lp);
myImage.setImageBitmap(bitmap1);

myImages[CityImageCount] = myImage;
myImages[CityImageCount].setId(CityImageCount);

(Примечание: вместо массива вы можете использовать ArrayList)

Второй , вам нужно использовать generateViewId () или ViewCompat.generateViewId () при установке идентификатора вида. Вы не можете вручную задать идентификатор вида с помощью простого идентификатора счетчика цикла, например:

myImages[CityImageCount].setId(CityImageCount);

это должно быть примерно так:

// View.generateViewId() is only available from api 17
myImages[CityImageCount].setId(View.generateViewId());

// Use ViewCompat if you need to support API < 17
// myImages[CityImageCount].setId(ViewCompat.generateViewId());

Третий , вам нужно обработать щелчок изображения, проверив идентификатор:

 myImages[CityImageCount].setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {

    // Check the id
    String id = v.getId();

    ...
 }

Если вам нужен специальный ключ для изображения, вы можете использовать HashMap вместо Array, как это:

Map<String, ImageView> map = new HashMap<String, ImageView>();

...
ImageView myImage = new ImageView(this);
map.put("Id1",myImage);

Last , разделите вашу логику на что-то вроде этого:

private ImageView generateImageView() {
  ImageView myImage = new ImageView(this);

  // set the ImageView properties here.
  ...

  return myImage;
} 

private void addImageViewToList(ImageView imageView) {
  // Add ImageView to the array
}

// hold previous click listener for ImageView.
private View.OnClickListener mImageViewClickListener;

// Get View.OnClickListener for ImageView, create it if not yet initialized.
private View.OnClickListener getImageViewClickListener() {
  if(mImageViewClickListener == null) {
     mImageViewClickListener = new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
          // handle the ImageView click here
          ...
        }
  }
  return mImageViewClickListener;
}

, чтобы вы могли упорядочить свой код в нечто вродеэто:

ImageView imageView = generateImageView();
imageView.setOnClickListener(getImageViewClickListener());
addImageViewToList(imageView);
0 голосов
/ 11 декабря 2018

Методы просмотра setTag () и getTag () могут вам помочь.здесь я вставляю ссылку на использование setTag () и getTag (). Какова основная цель методов setTag () getTag () для View?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...