我有一个自定义主题适配器,每行有3个项目。我设法填充它们 使用一些技巧,如3 *位置,3 *位置+ 1和... 但是为了添加项目点击监听器,在我单击一行的每个项目中我得到相同的位置。请帮忙。
我的主题:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/linear">
<ImageView
android:id="@+id/img3"
android:scaleType="fitXY"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_weight="1"
android:layout_margin="5dp"
/>
<ImageView
android:layout_height="100dp"
android:id="@+id/img2"
android:scaleType="fitXY"
android:layout_width="100dp"
android:layout_weight="1"
android:layout_margin="5dp"
/>
<ImageView
android:layout_height="100dp"
android:id="@+id/img1"
android:scaleType="fitXY"
android:layout_width="100dp"
android:layout_weight="1"
android:layout_margin="5dp"/>
</LinearLayout>
我的适应者:
@Override
public void onBindViewHolder(myViewHolder holder, int position) {
if(mPhotos.size()>(3*position)){
Photo item = mPhotos.get(3*position);
Picasso.with(MBase.getContext())
.load(item.getMedia())
.placeholder(android.R.drawable.btn_star)
.into(holder.img1);
}else {
return;
}
if(mPhotos.size()>(((3*position)+1))){
Photo item=mPhotos.get(((3*position)+1));
Picasso.with(MBase.getContext())
.load(item.getMedia())
.placeholder(android.R.drawable.btn_star)
.into(holder.img2);
}
else {
return;
}
if(mPhotos.size()>(((3*position)+2))){
Photo item=mPhotos.get(((3*position)+2));
Picasso.with(MBase.getContext())
.load(item .getMedia())
.placeholder(android.R.drawable.btn_star)
.into(holder.img3);
}else {
return;
}
}
我的项目clicklistener:
public class RecyclerItemListener implements RecyclerView.OnItemTouchListener {
public static interface ClickListener{
public void onClick(View view,int position);
public void onLongClick(View view, int position);
}
private ClickListener clicklistener;
private GestureDetector gestureDetector;
public RecyclerItemListener(Context context, final RecyclerView recycleView, final ClickListener clicklistener){
this.clicklistener=clicklistener;
gestureDetector=new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child=recycleView.findChildViewUnder(e.getX(),e.getY());
if(child!=null && clicklistener!=null){
clicklistener.onLongClick(child,recycleView.getChildAdapterPosition(child));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child=rv.findChildViewUnder(e.getX(),e.getY());
if(child!=null && clicklistener!=null && gestureDetector.onTouchEvent(e)){
clicklistener.onClick(child,rv.getChildLayoutPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
答案 0 :(得分:0)
最后我修好了。 我将标记设置为自定义主题视图,然后使用触摸侦听器传递它们。 那太复杂了