我在使用包含一些图像视图的线性布局的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()));
}
});
}
请有人帮我解决这个问题
答案 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)
虽然在horizontalScrollView中添加水平线性布局,但是你可以制作一个可水平滚动的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/