Android - Как сгенерировать код onClick для элементов ScrollView? - PullRequest
0 голосов
/ 27 мая 2020

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".chatActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp">

        <LinearLayout
            android:id="@+id/imageGallery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical" />
    </ScrollView>
</RelativeLayout>

Вот как я генерирую представление в моем коде:

    LinearLayout imageGallery;
    File[] fList = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        imageGallery = (LinearLayout) findViewById(R.id.imageGallery);
        addImagesToTheGallery();
}

    private void addImagesToTheGallery() {

        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        fList = path.listFiles();
        if(fList!=null)
        {
            int len = fList.length;
            for(int i=0; i<len; i++)
            {
                imageGallery.addView(getImageView(i));
            }
        }
    }

    private View getImageView(int image) {
        ImageView imageView = new ImageView(getApplicationContext());
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        lp.setMargins(0, 0, 10, 0);
        imageView.setLayoutParams(lp);
        Bitmap bitmap = BitmapFactory.decodeFile(fList[image].getAbsolutePath());
        imageView.setImageBitmap(bitmap);
        return imageView;
    }

Теперь я хочу добавить onClick событие для каждого из этих изображений. Когда кто-то нажимает на изображение, я хочу отобразить сообщение с указанием c для этого изображения . Так что я должен либо получить изображение, либо его положение. Как я могу это сделать?

1 Ответ

0 голосов
/ 27 мая 2020

Установите "imageView" наCLickListener.

private View getImageView(int image) {
    ImageView imageView = new ImageView(getApplicationContext());
    LinearLayout.LayoutParams lp = new 
    LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.setMargins(0, 0, 10, 0);
    imageView.setLayoutParams(lp);
    Bitmap bitmap = BitmapFactory.decodeFile(fList[image].getAbsolutePath());
    imageView.setImageBitmap(bitmap);
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO do something
            Toast.makeText(this, "item num" + 
                image, Toast.LENGTH_LONG).show();
        }
    }); 
    return imageView;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...