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();
.
.
.
}
以此类推
虽然在 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);
然后对于点击侦听器,您必须在 RecyclerView 适配器中的 imageView 上设置侦听器。
在这里您可能会发现这个 link 有用...http://www.androidhive.info/2016/01/android-working-with-recycler-view/
我在使用包含一些图像视图的 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();
.
.
.
}
以此类推
虽然在 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);
然后对于点击侦听器,您必须在 RecyclerView 适配器中的 imageView 上设置侦听器。
在这里您可能会发现这个 link 有用...http://www.androidhive.info/2016/01/android-working-with-recycler-view/