Java 在listview android中多次单击
我正在做一个应用程序,显示一个数据库用户。我想添加不同的操作取决于每个元素中的单击区域 这是我的列表视图的实际代码:Java 在listview android中多次单击,java,android,listview,Java,Android,Listview,我正在做一个应用程序,显示一个数据库用户。我想添加不同的操作取决于每个元素中的单击区域 这是我的列表视图的实际代码: <?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="wra
<?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="wrap_content"
android:padding="5dp" >
<ImageView
android:id="@+id/logo"
android:layout_width="100px"
android:layout_height="100px"
android:layout_marginLeft="5px"
android:layout_marginRight="20px"
android:layout_marginTop="5px"
android:src="@drawable/icondatabase" >
</ImageView>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.91"
android:text="Not users"
android:textSize="70px" />
<ImageView
android:id="@+id/imageAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
这是创建列表的类:
public class UsersArrayAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
private final List<Bitmap> listImages;
private final String process;
public UsersArrayAdapter(Context context, String[] values,
List<Bitmap> listImages, String process) {
super(context, R.layout.users, values);
this.context = context;
this.values = values;
this.listImages = listImages;
this.process = process;
}
public UsersArrayAdapter(Context context, String[] values) {
super(context, R.layout.users, values);
this.context = context;
this.values = values;
this.listImages = null;
this.process = "";
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.users, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
ImageView imageView2 = (ImageView) rowView
.findViewById(R.id.imageAction);
textView.setText(values[position]);
if (listImages == null) {
imageView.setImageResource(R.drawable.iconenroll);
} else {
imageView.setImageBitmap(listImages.get(position));
if (process.compareTo("users") == 0) {
imageView2.setImageResource(android.R.drawable.ic_menu_delete);
}
if (process.compareTo("verify") == 0) {
imageView2.setImageResource(android.R.drawable.ic_media_play);
}
}
return rowView;
}
}
public类UsersArrayAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终字符串[]值;
私人最终名单;
私有最终字符串处理;
public UsersArrayAdapter(上下文上下文,字符串[]值,
列表图像,字符串处理){
super(上下文、R.layout.users、值);
this.context=上下文;
这个值=值;
this.listImages=listImages;
这个过程=过程;
}
public UsersArrayAdapter(上下文上下文,字符串[]值){
super(上下文、R.layout.users、值);
this.context=上下文;
这个值=值;
this.listImages=null;
这个过程=”;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
视图行视图=充气机。充气(R.layout.users,parent,false);
TextView TextView=(TextView)rowView.findViewById(R.id.label);
ImageView=(ImageView)rowView.findViewById(R.id.logo);
ImageView imageView2=(ImageView)行视图
.findviewbyd(R.id.imageAction);
setText(值[位置]);
如果(listImages==null){
setImageResource(R.drawable.iconenroll);
}否则{
setImageBitmap(listImages.get(position));
if(process.compareTo(“用户”)==0){
imageView2.setImageResource(android.R.drawable.ic_菜单_删除);
}
if(process.compareTo(“verify”)==0){
imageView2.setImageResource(android.R.drawable.ic_media_play);
}
}
返回行视图;
}
}
如果用户在imageaction中单击执行某些操作,如果在textview中单击执行其他操作,我该如何处理
谢谢您可以为textview和imageview设置onclicklisteners。但是您必须使用视图持有者
static class ViewHolder{
ImageView imageone;
ImageView imagetwo;
TextView tvone;
}
in the adapter getview
final ViewHolder holder;
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.custom_view_new, null);
holder = new ViewHolder();
........
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.imageone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// do ur work
}
}
holder.tvone.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// do ur work
}
}
默认情况下,textView不可单击,您必须在textView中设置
android:clickable=“true”
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO
}
});
imageView2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO
}
});
试试这个:
static class ViewHolder {
public TextView searchpageNameTextView;
public ImageView ivStar;
}
内部getView方法:
View rowView = convertView;
// reuse views
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.demo, null);
// configure view holder
ViewHolder viewHolder = new ViewHolder();
viewHolder.searchpageNameTextView = (TextView) rowView.findViewById(R.id.tvName);
viewHolder.ivStar = (ImageView) rowView.findViewById(R.id.ivgstar);
rowView.setTag(viewHolder);
}
final ViewHolder holder = (ViewHolder) rowView.getTag();
holder.searchpageNameTextView.setText(text you want to set);
holder.image.setImageBitmap(your bitmap);
holder.searchpageNameTextView.setOnClickListener(do your stuffs);
holder.image.setOnClickListener(do your stuffs);
return rowView;
以上代码运行良好。我在我的应用程序中实现了它。您可以在自定义BaseAdapter的getView()中为相应元素设置ClickListeners:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.search_result_item, null);
}
final int fPos=position;
ImageView image1=(ImageView)convertView.findViewById(R.id.img1);
TextView tv1=(TextView)convertView.findViewById(R.id.tv1);
image1.setOnClickListener(new onClickListener(){
@Override
public void onClick(View v) {
Log.i("CustomAdapter", "List item "+ fPos +" had it's image clicked");
}
});
tv1.setOnClickListener(new onClickListener(){
@Override
public void onClick(View v) {
Log.i("CustomAdapter", "List item "+ fPos +" had it's text view clicked");
}
});
return convertView;
}
遗憾的是,设置这些视图的onClick
方法会使列表行本身不可点击,因为它们占据了所有焦点。如果您希望整行都可以单击,并使用ListView
的onItemClickListener
进行单独操作,则必须将android:DegenantFocusability=“BlocksDescents”
标记添加到imageview/textview的父布局并设置
android:focusable="false"
android:focusableInTouchMode="false"
对于xml格式的
ImageView
和TextView
。为什么不使用viewholder就不能设置OP?平滑滚动。假设转换视图!=空,如果为空,则必须膨胀viewholder持有的视图,并将viewholder设置为标记。如果考虑性能,则应建议。你已经告诉OP,他必须这么做,这是不正确的。