为自定义列表视图的每个项目添加一个下拉菜单 [英] Add a drop down menu for each item of a Custom ListView

查看:362
本文介绍了为自定义列表视图的每个项目添加一个下拉菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自定义列表视图,工作完美。
现在,我想为列表中的每个项目下拉菜单,以便当用户点击列表中的任何项目时,下拉菜单显示两个选项 - 编辑和删除。根据用户的选择,列表视图项目被照顾。



我想知道将下拉菜单添加到每个列表视图项的方法。



列表项目的xml文件 -

 <?xml版本=1.0encoding =utf-8?> 
< RelativeLayout xmlns:android =http://schemas.android.com/apk/res/android
android:layout_width =match_parentandroid:layout_height =120dp
机器人:背景= #FFFFFF >
< CheckBox
android:layout_width =wrap_content
android:layout_height =wrap_content
android:layout_centerVertical =true
android:id =@ + id / chkitem
android:layout_alignParentLeft =true
/>
< TextView android:id =@ + id / textTitle
android:layout_width =200dp
android:layout_height =60dp
android:textSize =15dp
android:textColor =#000000
android:textStyle =bold
android:gravity =fill
android:layout_toRightOf =@ + id / chkitem
/>
< TextView
android:layout_width =200dp
android:layout_height =60dp
android:id =@ + id / detail
android: textSize =15dp
android:textStyle =italic
android:gravity =fill
android:layout_toRightOf =@ + id / chkitem
android:layout_below = @ + ID / textTitle/>
< / RelativeLayout>

适配器类

 code> public class list_addr_adapter extends ArrayAdapter< list_addr> {

上下文上下文;
int layoutResourceId;



public list_addr_adapter(Context context,int layoutResourceId,List< list_addr> items){
super(context,layoutResourceId,items);
this.layoutResourceId = layoutResourceId;
this.context = context;
// this.listener = callback;
}

/ *私有视图持有者类* /
私有类ViewHolder {

TextView txtTitle;
TextView txtDetail;

}
ViewHolder holder = null;

public View getView(int position,View convertView,ViewGroup parent){
final list_addr lists = getItem(position);
final int pos = position;


LayoutInflater mInflater =(LayoutInflater)上下文
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if(convertView == null){
convertView = mInflater.inflate(R.layout.items_sav_addr2,null);
holder = new ViewHolder();
holder.txtTitle =(TextView)convertView.findViewById(R.id.textTitle);
holder.txtDetail =(TextView)convertView.findViewById(R.id.detail);

convertView.setTag(holder);
} else
holder =(ViewHolder)convertView.getTag();






holder.txtTitle.setText(lists.getTitle());
holder.txtDetail.setText(lists.getDetail());

return convertView;
}

}

我想要这样这个 -



解决方案

检查:



Xml:

  ?xml version =1.0encoding =utf-8?> 
< RelativeLayout xmlns:android =http://schemas.android.com/apk/res/android
android:layout_width =match_parent
android:layout_height =120dp
android:background =#FFFFFF>

< CheckBox
android:id =@ + id / chkitem
android:layout_width =wrap_content
android:layout_height =wrap_content
android:layout_alignParentLeft =true
android:layout_centerVertical =true/>

< TextView
android:id =@ + id / textTitle
android:layout_width =200dp
android:layout_height =60dp
android:layout_toRightOf =@ + id / chkitem
android:gravity =fill
android:textColor =#000000
android:textSize =15dp
android:textStyle =bold/>

< TextView
android:id =@ + id / detail
android:layout_width =200dp
android:layout_height =60dp
android:layout_below =@ + id / textTitle
android:layout_toRightOf =@ + id / chkitem
android:gravity =fill
android:textSize =15dp
android:textStyle =italic/>

< ImageView
android:id =@ + id / imageview
android:layout_width =wrap_content
android:layout_height =wrap_content
android:layout_alignParentRight =true
android:layout_centerInParent =true
android:src =@ mipmap / ic_launcher/> //替换图像

< ; / RelativeLayout的>

适配器类:

  public class list_addr_adapter extends ArrayAdapter< list_addr> {

上下文上下文;
int layoutResourceId;



public list_addr_adapter(Context context,int layoutResourceId,List< list_addr> items){
super(context,layoutResourceId,items);
this.layoutResourceId = layoutResourceId;
this.context = context;
// this.listener = callback;
}

/ *私有视图持有者类* /
私有类ViewHolder {

TextView txtTitle;
TextView txtDetail;
ImageView imageview;

}
ViewHolder holder = null;

public View getView(int position,View convertView,ViewGroup parent){
final list_addr lists = getItem(position);
final int pos = position;


LayoutInflater mInflater =(LayoutInflater)上下文
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if(convertView == null){
convertView = mInflater.inflate(R.layout.items_sav_addr2,null);
holder = new ViewHolder();
holder.txtTitle =(TextView)convertView.findViewById(R.id.textTitle);
holder.txtDetail =(TextView)convertView.findViewById(R.id.detail);
holder.imageview =(ImageView)convertView.findViewById(R.id.imageview);

convertView.setTag(holder);
} else
holder =(ViewHolder)convertView.getTag();

holder.txtTitle.setText(lists.getTitle());
holder.txtDetail.setText(lists.getDetail());

try {
holder.imageview.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v){


switch(v.getId()){
case R.id.imageview:

PopupMenu popup = new PopupMenu(getApplicationContext(),v );
popup.getMenuInflater()。inflate(R.menu.clipboard_popup,
popup.getMenu());
popup.show();
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){

switch(item.getItemId()){
case R.id.编辑:

//或者你想放在这里的其他一些代码..这只是一个例子
Toast.makeText(getApplicationContext(),Install Clicked at position+:+ position,Toast.LENGTH_LONG).show();

break;
case R.id.delete:

Toast.makeText(getApplicationContext(),添加到心愿单单击位置+:+位置,Toast.LENGTH_LONG).show( );

break;

默认值:
break;
}

返回true;
}
});

break;

默认值:
break;
}


}
});

} catch(Exception e){

e.printStackTrace();
}

return convertView;
}

}

Popup menu.xml

 <?xml version =1.0encoding =utf-8?> 
< menu xmlns:android =http://schemas.android.com/apk/res/android>
< item
android:id =@ + id / install
android:title =安装/>
< item
android:id =@ + id / addtowishlist
android:title =添加到愿望清单/>
< / menu>

参考这个: Android列表视图布局与Google播放类似


I have a Custom List view that works perfectly. Now, I want to have a drop down menu for each item in the list so that when the user taps on any item of the list,the drop down menu shows two options-edit and delete. According to the user's choice the list view item is taken care of.

I want to know the method of adding the drop down menu to each listview item.

xml file for list items-

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="120dp"
android:background="#FFFFFF">
<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:id="@+id/chkitem"
    android:layout_alignParentLeft="true"
   />
<TextView android:id="@+id/textTitle"
    android:layout_width="200dp"
    android:layout_height="60dp"
    android:textSize="15dp"
    android:textColor="#000000"
    android:textStyle="bold"
    android:gravity="fill"
    android:layout_toRightOf="@+id/chkitem"
    />
<TextView
    android:layout_width="200dp"
    android:layout_height="60dp"
    android:id="@+id/detail"
    android:textSize="15dp"
    android:textStyle="italic"
    android:gravity="fill"
    android:layout_toRightOf="@+id/chkitem"
    android:layout_below="@+id/textTitle"/>
    </RelativeLayout>

adapter class

 public class list_addr_adapter extends ArrayAdapter<list_addr> {

Context context;
int layoutResourceId;



public list_addr_adapter(Context context, int layoutResourceId,          List<list_addr> items) {
    super(context, layoutResourceId, items);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    //  this.listener=callback;
}

/*private view holder class*/
private class ViewHolder {

    TextView txtTitle;
    TextView txtDetail;

}
ViewHolder holder = null;

public View getView(int position, View convertView, ViewGroup parent) {
    final list_addr lists = getItem(position);
    final int pos=position;


    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.items_sav_addr2, null);
        holder = new ViewHolder();
        holder.txtTitle = (TextView) convertView.findViewById(R.id.textTitle);
        holder.txtDetail = (TextView) convertView.findViewById(R.id.detail);

        convertView.setTag(holder);
    } else
        holder = (ViewHolder) convertView.getTag();






    holder.txtTitle.setText(lists.getTitle());
    holder.txtDetail.setText(lists.getDetail());

    return convertView;
}

  }

I want it to be something like this -

解决方案

Check This:

Xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="#FFFFFF">

<CheckBox
    android:id="@+id/chkitem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true" />

<TextView
    android:id="@+id/textTitle"
    android:layout_width="200dp"
    android:layout_height="60dp"
    android:layout_toRightOf="@+id/chkitem"
    android:gravity="fill"
    android:textColor="#000000"
    android:textSize="15dp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/detail"
    android:layout_width="200dp"
    android:layout_height="60dp"
    android:layout_below="@+id/textTitle"
    android:layout_toRightOf="@+id/chkitem"
    android:gravity="fill"
    android:textSize="15dp"
    android:textStyle="italic" />

<ImageView
    android:id="@+id/imageview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerInParent="true"
    android:src="@mipmap/ic_launcher" />// Replace Image

</RelativeLayout>

Adapter Class:

public class list_addr_adapter extends ArrayAdapter<list_addr> {

Context context;
int layoutResourceId;



public list_addr_adapter(Context context, int layoutResourceId,          List<list_addr> items) {
    super(context, layoutResourceId, items);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    //  this.listener=callback;
}

/*private view holder class*/
private class ViewHolder {

    TextView txtTitle;
    TextView txtDetail;
    ImageView imageview;

}
ViewHolder holder = null;

public View getView(int position, View convertView, ViewGroup parent) {
    final list_addr lists = getItem(position);
    final int pos=position;


    LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.items_sav_addr2, null);
        holder = new ViewHolder();
        holder.txtTitle = (TextView) convertView.findViewById(R.id.textTitle);
        holder.txtDetail = (TextView) convertView.findViewById(R.id.detail);
        holder.imageview = (ImageView) convertView.findViewById(R.id.imageview);

        convertView.setTag(holder);
    } else
        holder = (ViewHolder) convertView.getTag();

    holder.txtTitle.setText(lists.getTitle());
    holder.txtDetail.setText(lists.getDetail());

    try {
        holder.imageview.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {


            switch (v.getId()) {
                case R.id.imageview:

                    PopupMenu popup = new PopupMenu(getApplicationContext(), v);
                    popup.getMenuInflater().inflate(R.menu.clipboard_popup,
                            popup.getMenu());
                    popup.show();
                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {

                            switch (item.getItemId()) {
                                case R.id.edit:

                                    //Or Some other code you want to put here.. This is just an example.
                                    Toast.makeText(getApplicationContext(), " Install Clicked at position " + " : " + position, Toast.LENGTH_LONG).show();

                                    break;
                                case R.id.delete:

                                    Toast.makeText(getApplicationContext(), "Add to Wish List Clicked at position " + " : " + position, Toast.LENGTH_LONG).show();

                                    break;

                                default:
                                    break;
                            }

                            return true;
                        }
                    });

                    break;

                default:
                    break;
            }


        }
    });

} catch (Exception e) {

    e.printStackTrace();
}

return convertView;
}

 }

Popup menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/install"
    android:title="Install" />
<item
    android:id="@+id/addtowishlist"
    android:title="Add to wishlist" />
</menu>

Refer This: Android List view layout Similar to Google play

这篇关于为自定义列表视图的每个项目添加一个下拉菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆