Java 自定义listview的onclick侦听器
我正在开发一个带有自定义列表视图的android应用程序(带有一个图像和两个文本视图) 班级活动有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.
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;
}