列表视图中的图像无法点击

时间:2015-06-08 18:18:18

标签: android

我可以打开应用程序,但我无法点击图片..我在做什么错?

以下是适配器

adapter = new ContactImageAdapter1(this, R.layout.screen_list1,
imageArry);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);
dataList.setOnItemClickListener(new OnItemClickListener() {         
       public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // Send intent to SingleViewActivity
           Intent i = new Intent(MainActivity.this, SingleViewActivity.class);
           // Pass image index
           i.putExtra("id", position);
           startActivity(i);
           } });

这是活动主要

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dip" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:text="Latest" />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"

        android:background="#B29090" >
    </ListView>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:gravity="center_vertical"
        android:text="Recomanded" />

    <ListView
        android:id="@+id/list1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dip"
        android:background="#4A9C67" >
    </ListView>
</LinearLayout>

这是ContactImageAdapter1类

package com.example.sqlfirst;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ContactImageAdapter1 extends ArrayAdapter<Contact>{
Context context;
int layoutResourceId;
ArrayList<Contact> data=new ArrayList<Contact>();
public ContactImageAdapter1(Context context, int layoutResourceId, ArrayList<Contact> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ImageHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ImageHolder();
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
row.setTag(holder);
}
else
{
holder = (ImageHolder)row.getTag();
}
Contact picture = data.get(position);
holder.txtTitle.setText(picture ._name);
//convert byte to bitmap take from contact class
byte[] outImage=picture._image;
ByteArrayInputStream imageStream = new ByteArrayInputStream(outImage);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);
holder.imgIcon.setImageBitmap(theImage);
return row;
}
static class ImageHolder
{
ImageView imgIcon;
TextView txtTitle;
}
}

4 个答案:

答案 0 :(得分:1)

我想你有一个ContactImageAdapter1类的地方。 从列表项布局加载ImageView后,必须在View.OnClickListener方法附加getView

所以,你的getView方法必须是这样的:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View row = convertView;
  ImageHolder holder = null;
  if(row == null)
  {
   LayoutInflater inflater = ((Activity)context).getLayoutInflater();
   row = inflater.inflate(layoutResourceId, parent, false);
   holder = new ImageHolder();
   holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
   holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
   // lets attach the click listener!
   holder.imgIcon.setOnClickListener(new OnClickListener() { 
      @Override
      public void onClick(View view) {
       Intent i = new Intent(((Activity)context), SingleViewActivity.class);  // or whatever method you have to get the context
       // Pass image index
       i.putExtra("id", position);
       startActivity(i);
      }
   });
   row.setTag(holder);
  }else
  {
    holder = (ImageHolder)row.getTag();
  }
  Contact picture = data.get(position);
  holder.txtTitle.setText(picture ._name);
  //convert byte to bitmap take from contact class
  byte[] outImage=picture._image;
  ByteArrayInputStream imageStream = new    
  ByteArrayInputStream(outImage);
  Bitmap theImage = BitmapFactory.decodeStream(imageStream);
  holder.imgIcon.setImageBitmap(theImage);
  return row;
}

答案 1 :(得分:0)

进入自定义布局(screen_list1)的根目录并添加:

android:descendantFocusability = "blocksDescendants"

这可能是你的问题。

答案 2 :(得分:0)

如果您正在使用appcompat库中的Activity / Fragment,请尝试android.support.v7.internal.widget.AdapterViewCompat.OnItemClickListener

答案 3 :(得分:0)

在您的代码中,您已将ImageHolder类设置为Adapter类中的静态类,因此强制DVM仅为ListView中的所有项创建一个副本,因此问题< / p>