Java 自定义listview的onclick侦听器

Java 自定义listview的onclick侦听器,java,android,android-layout,listview,android-listview,Java,Android,Android Layout,Listview,Android Listview,我正在开发一个带有自定义列表视图的android应用程序(带有一个图像和两个文本视图) 班级活动有 public class MainActivity extends ActionBarActivity { String[] memetitles; String[] memedesc; ListView list; int[] images = {R.drawable.angry_icon,R.drawable.happy_icon,R.drawable.kid_icon,R.drawable.

我正在开发一个带有自定义列表视图的android应用程序(带有一个图像和两个文本视图)

班级活动有

public class MainActivity extends ActionBarActivity {
String[] memetitles;
String[] memedesc;
ListView list;
int[] images = {R.drawable.angry_icon,R.drawable.happy_icon,R.drawable.kid_icon,R.drawable.scare_icon,R.drawable.warn_icon};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Resources res = getResources();
    memetitles = res.getStringArray(R.array.titles);
    memedesc = res.getStringArray(R.array.notneed);
    list = (ListView) findViewById(R.id.listView1);
    Itarray adapter = new Itarray(this,memetitles,memedesc,images);
    list.setAdapter(adapter);
    setTitle("Tamil Memer");
}
用于将两个布局组合到单个列表视图中的类

class Itarray extends ArrayAdapter<String>{
Context context;
int[] image;
String[] tit1;
String[] tit2;
Itarray(Context c , String[] titles ,String[] notneed, int imgs[])
{
    super(c , R.layout.single_row,titles);
    this.context = c;
    this.image = imgs;
    this.tit1 = titles;
    this.tit2 = notneed;
}

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View row = convertView;
        if(row == null)
        {
        LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inf.inflate(R.layout.single_row , parent , false);
        }
        ImageView myImage = (ImageView) row.findViewById(R.id.imageView1);
        TextView tit = (TextView) row.findViewById(R.id.textView1);
        TextView des = (TextView) row.findViewById(R.id.textView2);
        myImage.setImageResource(image[position]);
        tit.setText(tit1[position]);
        des.setText(tit2[position]);
        return row;
    }   
类Itarray扩展了ArrayAdapter{
语境;
int[]图像;
字符串[]tit1;
字符串[]tit2;
Itarray(上下文c,字符串[]标题,字符串[]不需要,int-imgs[])
{
超级(c、R布局。单行,标题);
this.context=c;
this.image=imgs;
this.tit1=标题;
this.tit2=不需要;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视图行=转换视图;
if(行==null)
{
LayoutInflater inf=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
row=inf.FLABLE(R.layout.single_row,parent,false);
}
ImageView myImage=(ImageView)row.findViewById(R.id.imageView1);
TextView tit=(TextView)row.findViewById(R.id.textView1);
TextView des=(TextView)row.findViewById(R.id.textView2);
setImageResource(图像[位置]);
tit.setText(tit1[位置]);
des.setText(tit2[位置]);
返回行;
}   
}

两个布局文件: (带有图像和文本视图的视图)


(具有listview的一个)


我想知道如何以及在何处放置此自定义列表视图的onClickListener() 提前感谢

您有两个选择:

1)在您的活动中设置单击侦听器

list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
            // Do your stuff here
        }

 });
public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View row = convertView;
        if(row == null)
        {
        LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inf.inflate(R.layout.single_row , parent , false);
        }
        ImageView myImage = (ImageView) row.findViewById(R.id.imageView1);
        TextView tit = (TextView) row.findViewById(R.id.textView1);
        TextView des = (TextView) row.findViewById(R.id.textView2);
        myImage.setImageResource(image[position]);
        tit.setText(tit1[position]);
        des.setText(tit2[position]);
        row.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                  // Do your stuff here
            }
        });
        return row;
    }

如果在适配器中执行此操作,则需要遵循以下代码:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    ViewHolderItem holder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.your_list_item, null);
        View row = convertView;

        holder = new ViewHolderItem();
        convertView.setTag(holder);
        row.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.v(LOG_TAG, "ROW PRESSED");
                context.startActivity(new Intent(context, YourAction.class));
            }
        });

    } else {
        holder = (ViewHolderItem) convertView.getTag();
    }
    return convertView;

}

您好,先生,我尝试了这个方法,但令我惊讶的是,它显示了使用row.setOnClickListener(new OnClickListener())的错误。当我在适配器类中使用它时,它会抛出如下错误…类型视图中的方法setOnClickListener(View.OnClickListener)不适用于参数(new DialogInterface.OnClickListener(){})使用View.OnClickListener()而不是DialogInterface.OnClickListener()现在它正在工作。我在布局中使用了galleryview。我想使用“资源”文件夹中的图像作为“库”的图像。你能帮我吗?你应该将图像放在/res/drawable中为什么要将它们放在“资源”中?
public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View row = convertView;
        if(row == null)
        {
        LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inf.inflate(R.layout.single_row , parent , false);
        }
        ImageView myImage = (ImageView) row.findViewById(R.id.imageView1);
        TextView tit = (TextView) row.findViewById(R.id.textView1);
        TextView des = (TextView) row.findViewById(R.id.textView2);
        myImage.setImageResource(image[position]);
        tit.setText(tit1[position]);
        des.setText(tit2[position]);
        row.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                  // Do your stuff here
            }
        });
        return row;
    }
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    ViewHolderItem holder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.your_list_item, null);
        View row = convertView;

        holder = new ViewHolderItem();
        convertView.setTag(holder);
        row.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.v(LOG_TAG, "ROW PRESSED");
                context.startActivity(new Intent(context, YourAction.class));
            }
        });

    } else {
        holder = (ViewHolderItem) convertView.getTag();
    }
    return convertView;

}