首页 > 解决方案 > Android Listview和Horizo​​ntalview - 如果单击图像,不知道如何获取图像文件名

问题描述

我希望任何Android开发人员都可以帮助我在Horizo​​ntalView List上单击图像时如何获取图像文件名。我尝试将 setOnClickListener tp 添加到 imageview 字段,但它不起作用,并且无法从水平视图列表中滑动而崩溃。

我尝试的是在 中添加以下代码onSingleTapConfirmedHorizontalListView但它只返回整数值。我想返回我放在 image_image1_array 上的 imageURLHorizontalviewAdapter

public HorizontalviewAdapter(Context Context, int listposition, ItineraryWithPhotos itineraryWithPhotos, ArrayList<String> image1_array )

在 中HorizontalListView,我将以下代码添加到 onSingleTapConfirmed.

Object obj1 = HorizontalListView.this.mAdapter.getItemId(adapterIndex);

下面是我的代码。请帮忙

public class ItineraryListAdapter extends ArrayAdapter<ItineraryWithPhotos> {
    private ItineraryPlanner globalVariable = null;
    private final String sdCardFolderName = "ItineraryPlanner";
    Context context;

    List<ItineraryWithPhotos> itineraryRecordsList;
    private static final String TAG = "TagItineraryListAdapter";
    int Listposition;

    public static ArrayList<String> image1_array=new ArrayList<String>();

    LayoutInflater inflater;

    // Camera handler
    private ImageView ivImage;
    private File[] files;
    private String[] filesPaths;
    private String[] filesNames;

    public ItineraryListAdapter(Context context, List<ItineraryWithPhotos> itineraryRecordsList) {
        super(context, R.layout.itinerary_list_item, itineraryRecordsList);
        this.context = context;
        this.itineraryRecordsList = itineraryRecordsList;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {

        return itineraryRecordsList.size();
    }

    @Override
    public ItineraryWithPhotos getItem(int position) {
        return itineraryRecordsList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    public static class ViewHolder {

        TextView itineraryId;
        TextView country;
        TextView itineraryStatus;

        ImageView imgIndicator, image;
        RelativeLayout MyRelativeLayoutlayout;
        LinearLayout layoutHorizontal, imglayout;
        HorizontalListView horizontalListview;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        ViewHolder holder = null;
        Listposition = position;

        if (rowView == null) {
            holder = new ViewHolder();
            rowView = inflater.inflate(R.layout.itinerary_list_item, parent, false);
            holder.country = (TextView) rowView.findViewById(R.id.txt_travel_country);
            holder.itineraryStatus = (TextView) rowView.findViewById(R.id.txt_itinerary_status);

            holder.MyRelativeLayoutlayout = (RelativeLayout) rowView.findViewById(R.id.itineary_row_layout);
            holder.layoutHorizontal = (LinearLayout) rowView.findViewById(R.id.layout_horizontal);
            holder.horizontalListview = (HorizontalListView) rowView.findViewById(R.id.list_images);
            holder.imglayout = new LinearLayout(context);

            rowView.setTag(holder);

        } else {
            holder = (ViewHolder) rowView.getTag();
        }

        final ItineraryWithPhotos itineraryWithPhotos = (ItineraryWithPhotos) getItem(position);
        holder.country.setText(itineraryWithPhotos.getCountry());

        HorizontalviewAdapter ada = new HorizontalviewAdapter(context,Listposition, itineraryWithPhotos, itineraryWithPhotos.getPhotoList());
        holder.horizontalListview.setAdapter(ada);

        return rowView;
    }
}

itinerary_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/itineary_row_layout"
    android:scrollbarStyle="insideInset"
    android:fadeScrollbars="true"
    android:scrollbarSize="10dip"
    android:fitsSystemWindows="true"
    android:weightSum="1.0"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/product_list_item_bg"
        android:padding="@dimen/space1"
        android:textSize="18dip"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">

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

            <TextView
                android:id="@+id/txt_travel_country"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="0.95"
                android:drawablePadding="@dimen/space1"
                android:paddingLeft="4dp"
                android:paddingTop="4dp"
                android:layout_marginLeft="10dp"
                android:textColor="@color/textDarkGrey"
                android:textSize="18sp"
                android:text="New Zealand"
                fontPath="fonts/bold.otf"
                tools:ignore="MissingPrefix"/>

            <TextView
                android:id="@+id/txt_itinerary_status"
                fontPath="fonts/bold.otf"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight=".28"
                android:drawablePadding="@dimen/space1"
                android:gravity="left"
                android:paddingLeft="2dp"
                android:paddingRight="5dp"
                android:text="@string/itinerary_status_active"
                android:textColor="@color/colorPrimary"
                android:textSize="@dimen/h4"
                tools:ignore="MissingPrefix" />
        </LinearLayout>

        <View
            android:id="@+id/divider_line__header"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_below="@+id/row_1"
            android:layout_marginTop="10dp"
            android:background="@color/view_divider_color" />


        <LinearLayout
            android:id="@+id/layout_horizontal"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:layout_marginLeft="5dp"
            android:orientation="horizontal"
            android:visibility="visible"
            android:layout_below="@+id/row_6"  >

            <au.com.klau.itineraryplanner.HorizontalListView
                android:id="@+id/list_images"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clickable="true"
                android:gravity="center" >
            </au.com.klau.itineraryplanner.HorizontalListView>
        </LinearLayout>

    </RelativeLayout>

</RelativeLayout>

itinerary_image_horizo​​ntal.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="150dp"
        android:layout_height="120dp"
        android:scaleType="fitXY"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="4dp"
        android:contentDescription="none"
        android:src="@drawable/nsw_sydney"/>

</LinearLayout>

   public class HorizontalviewAdapter extends BaseAdapter  {
            static Context context;
            LayoutInflater inflater;
            int GroupPosition,ListPosition;
            ArrayList<String> itinerary_image_array;
            ItineraryWithPhotos itineraryWithPhotos;

            private ItineraryPlanner globalVariable = null;

            public HorizontalviewAdapter(Context Context, int listposition, ItineraryWithPhotos itineraryWithPhotos, ArrayList<String> image1_array )
            {
                context = Context;
                this.ListPosition = listposition;
                this.itinerary_image_array = image1_array;
                inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                this.itineraryWithPhotos = itineraryWithPhotos;
            }

            @Override
            public int getCount() {
                return this.itinerary_image_array.size();
            }

            @Override
            public Object getItem(int position) {
                return this.itinerary_image_array.size();
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            public static class ViewHolder {
                ImageView imgIndicator,image;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                View rowView = convertView;
                ViewHolder holder = null;

                if (rowView == null)
                {
                    holder = new ViewHolder();
                    rowView = inflater.inflate(R.layout.itinerary_image_horizontal, parent, false);
                    holder.imgIndicator=(ImageView)rowView.findViewById(R.id.imageView1);
                    rowView.setTag(holder);
                }
                else
                {
                    holder=(ViewHolder)rowView.getTag();
                }

                String imageUrl = itinerary_image_array.get(position);
                Glide.with(context)
                        .load("file://"+imageUrl)
                        .centerCrop()
                        .placeholder(R.drawable.ic_launcher)
                        .error(R.drawable.ic_launcher)
                        .into(holder.imgIndicator);
                return rowView;
            }
    }

    public class HorizontalListView extends AdapterView<ListAdapter> {
                private static final int INSERT_AT_END_OF_LIST = -1;
                private static final int INSERT_AT_START_OF_LIST = 0;
                private static final float FLING_DEFAULT_ABSORB_VELOCITY = 30f;
                private static final float FLING_FRICTION = 0.009f;
                private static final String BUNDLE_ID_CURRENT_X = "BUNDLE_ID_CURRENT_X";
                private static final String BUNDLE_ID_PARENT_STATE = "BUNDLE_ID_PARENT_STATE";
                protected Scroller mFlingTracker = new Scroller(getContext());
                private final GestureListener mGestureListener = new GestureListener();
                private GestureDetector mGestureDetector;

                private OnClickListener mOnClickListener;

                Context context;
                private ItineraryPlanner globalVariable = null;

                public HorizontalListView(Context context, AttributeSet attrs) {
                    super(context, attrs);
                    this.context = context;
                    mEdgeGlowLeft = new EdgeEffectCompat(context);
                    mEdgeGlowRight = new EdgeEffectCompat(context);
                    mGestureDetector = new GestureDetector(context, mGestureListener);

                    System.out.println("HorizontalListView : Kam[start]");
                    bindGestureDetector();
                    initView();
                    retrieveXmlConfiguration(context, attrs);
                    setWillNotDraw(false);

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                        HoneycombPlus.setFriction(mFlingTracker, FLING_FRICTION);
                    }
                }


                private void bindGestureDetector() {
                    final View.OnTouchListener gestureListenerHandler = new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(final View v, final MotionEvent event) {
                            return mGestureDetector.onTouchEvent(event);
                        }
                    };

                    setOnTouchListener(gestureListenerHandler);
                }


                private class GestureListener extends GestureDetector.SimpleOnGestureListener {
                    @Override
                    public boolean onDown(MotionEvent e) {
                        return HorizontalListView.this.onDown(e);
                    }

                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                        return HorizontalListView.this.onFling(e1, e2, velocityX, velocityY);
                    }

                    @Override
                    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                        requestParentListViewToNotInterceptTouchEvents(true);
                        setCurrentScrollState(OnScrollStateChangedListener.ScrollState.SCROLL_STATE_TOUCH_SCROLL);
                        unpressTouchedChild();
                        mNextX += (int) distanceX;
                        updateOverscrollAnimation(Math.round(distanceX));
                        requestLayout();

                        return true;
                    }

                    @Override
                    public boolean onSingleTapConfirmed(MotionEvent e) {
                        unpressTouchedChild();
                        OnItemClickListener onItemClickListener = getOnItemClickListener();

                        globalVariable = (ItineraryPlanner) context.getApplicationContext();
                        String itineraryId = globalVariable.getItineraryId();
                        String country = globalVariable.getCountry();
                        String destination = globalVariable.getDestination();

                        final int index = getChildIndex((int) e.getX(), (int) e.getY());

                        if (index >= 0 && !mBlockTouchAction) {
                            View child = getChildAt(index);
                            int adapterIndex = mLeftViewAdapterIndex + index;

                            Object obj = HorizontalListView.this.mAdapter.getItemId(adapterIndex);
                            System.out.println("HorizontalListView.onSingleTapConfirmed - obj[" + obj.toString() + "]");


                            if (onItemClickListener != null) {
                                Object obj1 = HorizontalListView.this.mAdapter.getItemId(adapterIndex);
                                System.out.println("HorizontalListView.onSingleTapConfirmed - onItemClickListener  2 != null *****> obj1[" + obj1.toString() + "]");

                                onItemClickListener.onItemClick(HorizontalListView.this, child, adapterIndex, mAdapter.getItemId(adapterIndex));
                                return true;
                            }
                        }

                        if (mOnClickListener != null && !mBlockTouchAction)
                        {
                            mOnClickListener.onClick(HorizontalListView.this);
                        } else {
                            Object obj4 = HorizontalListView.this.mAdapter.getItemId(index);
                            System.out.println("HorizontalListView.onSingleTapConfirmed - onItemClickListener  4 != null *****> obj3[" + obj4.toString() + "]");
                            getContext().startActivity(new Intent(getContext(), au.com.klau.itineraryplanner.activity.DisplayImageActivity.class));

                        }

                        return false;
                    }
    }

标签: androidandroid-layoutandroid-listview

解决方案


在您的代码中,我找到了这种方法:

@Override
public long getItemId(int position) {
    return 0;
}

我认为这个方法应该返回位置,否则它将返回第一项值。


推荐阅读