android - 滚动并单击 ScrollView 内的项目

android - Scroll and click on item inside ScrollView

我在使用包含一些图像视图的 linearlayout 的 Scrollview 时遇到问题,因为我想分别单击每个图像视图,但 onclick 方法只允许我访问 linearlayout。

这是包含线性布局的滚动视图的布局

        <HorizontalScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/horizontalScrollView"
            android:layout_below="@+id/seekBar"
            android:layout_alignParentLeft="true"
            android:layout_above="@+id/nextButton"
            android:layout_alignParentRight="true" >

            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/eyesScrollView"></LinearLayout>
        </HorizontalScrollView>

然后我通过此代码以编程方式添加图像视图

LinearLayout eyesScrollView = (LinearLayout) findViewById(R.id.eyesScrollView);
        for (int k = 0; k < 5; k++) {
            ImageView imageView2 = new ImageView(this);
            imageView2.setId(k);
            imageView2.setPadding(2, 2, 2, 2);
            imageView2.setImageBitmap(BitmapFactory.decodeResource(getResources(), eyesArrayList.get(k)));
            eyesScrollView.addView(imageView2);
        }

这是访问线性布局 onclick 的代码

@Override
    public void onClick(View view) {
        LinearLayout manyPics = (LinearLayout) view;
        manyPics.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view){
                Log.v("theID",String.valueOf(view.getId()));
            }
        });
    }

谁能帮我解决这个问题

您正在将您的点击事件分配给您的 LinearLayout 因此无论您在该布局区域内单击什么地方,它都会触发来自 LinearLayout 而不是 imageView 本身的 onClick 事件。要完成您想要的,在您的 for 循环中和添加视图之前,您需要在创建 ImageView 后将 onClick 事件分配给它。

代码示例:

LinearLayout eyesScrollView = (LinearLayout) findViewById(R.id.eyesScrollView);
    for (int k = 0; k < 5; k++) {
        ImageView imageView2 = new ImageView(this);
        imageView2.setId(k);
        imageView2.setPadding(2, 2, 2, 2);
        imageView2.setImageBitmap(BitmapFactory.decodeResource(getResources(), eyesArrayList.get(k)));
        imageView2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view){
            doMyImageViewLogic(view);
        }
    });
        eyesScrollView.addView(imageView2);
    }

终于按照你的逻辑去做了

public void doMyImageViewLogic(View view){
    if(view.getId() == someId)
        doStuff();
    else if(view.getId() == otherId)
        doOtherStuff();
    .
    .
    .
}

以此类推

虽然在 horizo​​ntalScrollView 中添加水平线性布局可以让你制作一个水平滚动的 listView,但这确实令人沮丧,并且在性能方面也很糟糕。

实现水平 ListView 的正确方法是使用 RecyclerView 并将其 LinearLayoutManager 设置为水平方向

这是任务的概述... 当你使用 RecyclerView 时,你需要指定一个 LayoutManager 来负责布局视图中的每个项目。 LinearLayoutManager 允许您指定方向,就像普通的 LinearLayout 一样。

要使用 RecyclerView 创建水平列表,您可以这样做:

LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);
RecyclerView myList = (RecyclerView) findViewById(R.id.my_recycler_view);
myList.setLayoutManager(layoutManager);

然后对于点击侦听器,您必须在 RecyclerView 适配器中的 imageView 上设置侦听器。

在这里您可能会发现这个 link 有用...http://www.androidhive.info/2016/01/android-working-with-recycler-view/