检索ArrayList适配器中的元素

时间:2018-04-04 09:08:43

标签: android arraylist android-arrayadapter

我创建了一个listview,其中包含图片和按钮 - 我正在使用ArrayAdapter查看listview中的项目。

当我点击按钮时,我想获得点击该项目的详细信息。

所以我尝试了以下内容:

pd = productList.get(position);

productListArrayList<ProductDetails> productList;

的位置

getproductdetailsbuttonproductListadapter extends ArrayAdapter<ProductDetails>

中的按钮
holder.getproductdetailsbutton.setOnClickListener(new View.OnClickListener() 
{
     @Override
     public void onClick(View v) {

            String productID = pd.getProductID();
            String productName = pd. getProductName();

            Log.d("Value", " Product Details " + productID + " " + productName);
        }
 });

当我点击第一项中的按钮时,我会在日志中获得屏幕上显示的最后一项的详细信息。

如何获取该位置点击项目的详细信息?

谢谢!

更新:getVIEW代码:

@Override
    public View getView(final int position, View convertView, final ViewGroup parent)
    {

        Typeface tf = Typeface.createFromAsset(contextValue.getAssets(), fontPath);
        Typeface tf2 = Typeface.createFromAsset(contextValue.getAssets(), fontPath2);

        ViewHolder holder = null;

        if (convertView == null)
        {

            convertView = vi.inflate(R.layout.product_details_items, null);

            holder = new ViewHolder();
            holder.image = (ImageView) convertView.findViewById(R.id.productimage);
            holder.productgetdetails = (Button) convertView.findViewById(R.id.productgetdetails);
            holder.productgetdetails.setTag(position);    

            holder.productgetdetails.setTypeface(tf2);

            convertView.setTag(holder);

            ProductDetails pd = productList.get(position);

            if (pinexist.equalsIgnoreCase(contextValue.getString(R.string.pinexistvalue)))
            {
                Log.d("Value"," - ID " + pd.getProductID());

                if (logdb.checkproductDetailsExists(pd.getProductID()) == 0)
                {
                    holder.productgetdetails.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v)
                        {
                            Log.e("Value", " = FINAL" + productList.get(position).getProductID());
                        }
                    });
                }
                else
                {
                    holder.productgetdetails.setText(contextValue.getString(R.string.nodata));
                }

            }
            else
            {
                //DO NOTHING
            }
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        ProductDetails pd = productList.get(position);

        Glide.with(getContext().getApplicationContext())
                .load(pd.getProduct_image())
                .placeholder(R.drawable.placeholder)
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .skipMemoryCache(true)
                .into(holder.image);


        return convertView;
    }

2 个答案:

答案 0 :(得分:0)

我猜(实际上我很自信),您必须将pd声明为global变量,该变量会根据显示的最后一项更新,尝试将pd移至{ {1}}并将其标记为getView(),以便您可以在final内使用

onclick

答案 1 :(得分:0)

在布局中充气以在适配器中查看 您可以在按钮上设置OnClickListener

public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.list_layout, null,true);
        final Product pd = pdList.get(position);
        //....
        Button btn= (Button) = rowView.findViewById(R.id.getproductdetailsbutton);
        btn.setOnClickListener(new View.OnClickListener() 
        {
             @Override
             public void onClick(View v) {

                    String productID = pd.getProductID();
                    String productName = pd.getProductName();

                    Log.d("Value", " Product Details " + productID + " " + productName);
                }
         });
        //..

        return rowView;

    };

或者您可以处理ListView OnItemClickListener