zhangyutangde 2014年01月22日
写了一个类似UC右上角的弹出菜单(使用PopupWindow)

做了一个点菜系统,其中一个功能我想用弹出的窗口实现,然后就按自己的想法,找了资料,做了这个效果,支持动态的列表变化,然后动态刷新列表,总价格也会随着变化。第一次发帖,请多多支持,有改善的地方,多多指教。
图片如下:

MainActivity.java 核心控制类


public class MainActivity extends Activity {
 
        private Button btnShowOrdered;
 
        /** PopupWindow 相关 */
        private PopupWindow mPopupwinow = null;
        List<Menutbl> mMenus;
        private View llyPopView;// PopupWindow显示的View
        private ListView lsvContent;// PopupWindow显示的View中的ListView
        private ListContentAdapter mListContentAdapter;
        private Button btnOrder;
        private TextView txtTotalPrice;
 
        private ProgressDialog mProgressDialog;
 
        // private ListView lsvTest;
 
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
 
                initData();
                initUI();
                setListener();
        }
 
        private void initData() {
 
                mMenus = new ArrayList<Menutbl>();
                for (int i = 0; i < 27; i++) {
                        Menutbl menutbl = new Menutbl();
                        menutbl.setId(i);
                        menutbl.setName("第" + i + "盘菜");
                        menutbl.setPrice(i * i);
                        mMenus.add(menutbl);
                }
        }
 
        private void initUI() {
 
                // 主界面控件
                btnShowOrdered = (Button) findViewById(R.id.btn_show_ordered);
 
                // PopupWindow 控件
                llyPopView = LayoutInflater.from(MainActivity.this).inflate(
                                R.layout.popup_view, null);
                btnOrder = (Button) llyPopView.findViewById(R.id.btn_order);
                txtTotalPrice = (TextView) llyPopView
                                .findViewById(R.id.txt_total_price);
                lsvContent = (ListView) llyPopView.findViewById(R.id.lsv_content);
 
                // 设置数据适配器
                mListContentAdapter = new ListContentAdapter();
                mListContentAdapter.setMenus(mMenus);
                lsvContent.setAdapter(mListContentAdapter);
 
                mProgressDialog = new ProgressDialog(MainActivity.this);
                mProgressDialog.setIndeterminate(true);
                mProgressDialog.setCancelable(true);
                mProgressDialog.setTitle("提示");
                mProgressDialog.setMessage("菜单正在提交中,请稍后");
 
                // // FOR TEST
                // lsvTest = new ListView(MainActivity.this);
                // lsvTest.setLayoutParams(new android.widget.AbsListView.LayoutParams(
                // android.widget.AbsListView.LayoutParams.FILL_PARENT,
                // android.widget.AbsListView.LayoutParams.WRAP_CONTENT));
                // lsvTest.setCacheColorHint(0x00000000);// 设置 ListView 缓冲颜色为透明
                // lsvTest.setAdapter(mListContentAdapter);
                // // FOR TEST
        }
 
        private void setListener() {
                btnShowOrdered.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                if (mPopupwinow == null) {
                                        mPopupwinow = new PopupWindow(llyPopView,
                                                        LayoutParams.WRAP_CONTENT,
                                                        LayoutParams.WRAP_CONTENT, true);
                                        mPopupwinow.setBackgroundDrawable(new ColorDrawable(
                                                        0x00000000));
                                }
                                mPopupwinow.showAsDropDown(btnShowOrdered, 0, 0);
                                // mPopupwinow.showAtLocation(findViewById(R.id.rly_main),
                                // Gravity.RIGHT | Gravity.TOP, 0, 0);
                        }
                });
 
           
        }
 
        /**
         * Class Name: MainActivity.java<br>
         * Function:列表适配器<br>
         *
         * Modifications:<br>
         *
         * @author ZYT DateTime 2014-1-21 下午10:40:47<br>
         * <a href="\"http://www.eoeandroid.com/home.php?mod=space&uid=85817\"" target="\"_blank\"">@version</a> 1.0<br>
         * <br>
         */
        class ListContentAdapter extends BaseAdapter {
 
                private List<Menutbl> menus;
 
                // public ListContentAdapter(List<Menutbl> menus) {
                // this.menus = menus;
                // }
 
                public ListContentAdapter() {
                }
 
                public List<Menutbl> getMenus() {
                        return menus;
                }
 
                public void setMenus(List<Menutbl> menus) {
                        this.menus = menus;
                        int totalPrice = 0;
                        for (Menutbl menutbl : menus) {
                                totalPrice += menutbl.getPrice();
                        }
                        txtTotalPrice.setText("总价格:" + totalPrice + "元");
                }
 
                @Override
                public int getCount() {
                        return menus.size();
                }
 
                @Override
                public Object getItem(int position) {
                        return menus.get(position);
                }
 
                @Override
                public long getItemId(int position) {
                        return position;
                }
 
                @Override
                public View getView(final int position, View convertView,
                                ViewGroup parent) {
 
                        View view;
                        if (convertView != null) {
                                view = convertView;
                        } else {
 
                                LayoutInflater inflater = LayoutInflater
                                                .from(MainActivity.this);
                                view = inflater.inflate(R.layout.pop_list_item, null);
 
                                ViewHolder holder = new ViewHolder();
                                holder.txtName = (TextView) view.findViewById(R.id.txt_name);
                                holder.txtPrice = (TextView) view.findViewById(R.id.txt_price);
                                holder.btnDel = (ImageButton) view.findViewById(R.id.btnDel);
 
                                view.setTag(holder);
                        }
 
                        ViewHolder holder = (ViewHolder) view.getTag();
                        holder.txtName.setText("" + menus.get(position).getName() + "");
                        holder.txtPrice.setText("价格:" + menus.get(position).getPrice()
                                        + "元/份");
                        holder.btnDel.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                        mMenus.remove(position);
                                        mListContentAdapter.setMenus(mMenus);
                                        mListContentAdapter.notifyDataSetChanged();
                                }
                        });
 
                        return view;
                }
        }
 
        class ViewHolder {
                public TextView txtName;
                public TextView txtPrice;
                public ImageButton btnDel;
        }
 
}



主界面XML文件,很简单的就一个按钮控件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rly_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world" />
 
    <Button
        android:id="@+id/btn_show_ordered"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="show popup" />
 
</RelativeLayout>

...全文
105 点赞 收藏 2
写回复
2 条回复

还没有回复,快来抢沙发~

发动态
发帖子
Android
创建于2009-10-09

4.6w+

社区成员

9.0w+

社区内容

移动平台 Android
社区公告
暂无公告