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

时间:2016-09-08 15:26:12

标签: android scrollview android-linearlayout onclicklistener

我在使用包含一些图像视图的线性布局的Scrollview时遇到了麻烦,因为我想单独点击每个图像视图,但是onclick方法只允许我访问线性布局。

这是包含linearlayout

的scrollview的布局
        <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);
        }

这是访问linearlayout 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()));
            }
        });
    }

请有人帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

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

代码示例:

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();
    .
    .
    .
}

等等

答案 1 :(得分:0)

虽然在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);

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

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