功能简单介绍:在Activity页面中点击某个按钮,弹出自定义popupwindow页面,同时将Activity中的电话号码字符串传递给popupwindow页面。再点击popupwindow页面中的按键直接跳转到安卓拨号页面,同时电话号码也在页面上。
声明:值传递其实用的是安卓的全局变量。
全局变量类中的代码如下:
1 package com.cn.gordon.exhibition.walk.application; 2 3 import android.app.Application; 4 5 public final class GlobalVaries extends Application { 6 private String telNum; 7 8 public String getTelNum() { 9 return telNum; 10 } 11 12 public void setTelNum(String telNum) { 13 this.telNum = telNum; 14 } 15 16 @Override 17 public void onCreate() { 18 telNum = " "; 19 super.onCreate(); 20 } 21 }
其中使用全局变量需要在AndroidMenifest.xml中进行一个声明:
1 <application 2 android:icon="@drawable/ic_launcher" 3 android:label="@string/app_name" 4 android:theme="@style/AppTheme" 5 android:allowBackup="true" 6 android:name="com.cn.gordon.exhibition.walk.application.GlobalVaries"> 7 <activity 8 android:name=".LoadingActivity" 9 android:screenOrientation="portrait" 10 android:theme="@android:style/Theme.Black.NoTitleBar" > 11 <intent-filter>
.........以上是部分代码,其中android:name="com.cn.gordon.exhibition.walk.application.GlobalVaries"就是声明全局变量的使用。
以下是调用popupwindow的MybusicardholderActivity页面布局,名称是:mybusicardholder.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 android:background="#FFFFFFFF" > 7 8 <RelativeLayout 9 android:layout_width="match_parent" 10 android:layout_height="50dip" 11 android:background="#FF333333" > 12 13 <TextView 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:layout_centerInParent="true" 17 android:text="@string/mybusinesscardholder" 18 android:textColor="#FFFFFFFF" 19 android:textSize="20sp" /> 20 21 <Button 22 android:layout_width="80dip" 23 android:layout_height="50dip" 24 android:id="@+id/btn_menu" 25 android:background="@drawable/btn_login_back" 26 /> 27 <Button 28 android:layout_width="30dip" 29 android:layout_height="30dip" 30 android:id="@+id/btn_query" 31 android:layout_centerVertical="true" 32 android:layout_alignParentRight="true" 33 android:layout_marginRight="20dip" 34 android:background="@drawable/querybtn_pressed_bg" /> 35 </RelativeLayout> 36 <ListView 37 android:layout_width="fill_parent" 38 android:layout_height="wrap_content" 39 android:id="@+id/mybusicardlistView" 40 android:divider="@color/lightgray" 41 android:dividerHeight="1dip" 42 android:footerDividersEnabled="true" 43 android:headerDividersEnabled="true" 44 > 45 </ListView> 46 </LinearLayout>
MybusicardholderActivity中的源码如下:
/** * @author Seawin龙 */ package com.cn.gordon.exhibition.walk.activity; import java.util.ArrayList; import java.util.HashMap; import com.cn.gordon.exhibition.walk.application.GlobalVaries; import com.cn.gordon.exhibition.walk.entity.MyBusiCardHolderBean; import com.cn.gordon.exhibition.walk.popup.BusicardPopupWindow; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; /** * @author Seawin龙 * */ public class MybusicardholderActivity extends Activity { private ListView listView; private SimpleAdapter simpleAdapter; private String telNum; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mybusicardholder); GlobalVaries globalTelNum = (GlobalVaries)getApplication(); init(globalTelNum); setAction(); } /** * @author Seawin龙 * @param globalTelNum */ public void init(final GlobalVaries globalTelNum) { listView = (ListView)findViewById(R.id.mybusicardlistView); ArrayList<HashMap<String, Object>> list; list = this.getItem(); simpleAdapter = new SimpleAdapter(this,list , R.layout.busicardlistviewitem, new String[]{"companyname","getcardtime","exhibitionname","companyphonenum"}, new int[]{R.id.companyname,R.id.getcardtime,R.id.exhibitionname,R.id.companyphonenum}); listView.setAdapter(simpleAdapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ArrayList<MyBusiCardHolderBean> list = getmylist(); MyBusiCardHolderBean bean = new MyBusiCardHolderBean(); BusicardPopupWindow bpw = new BusicardPopupWindow(MybusicardholderActivity.this); int[] location = new int[2]; arg1.getLocationOnScreen(location); bean = list.get(arg2); telNum = bean.getCompanyPhonenum(); bpw.showAtLocation(getCurrentFocus(),0,location[0]+150, location[1]+20); globalTelNum.setTelNum(telNum.substring(3, telNum.length())); Toast.makeText(MybusicardholderActivity.this, telNum.substring(3, telNum.length()), Toast.LENGTH_SHORT).show(); } }); } private ArrayList<MyBusiCardHolderBean> getmylist(){ ArrayList<MyBusiCardHolderBean> list = new ArrayList<MyBusiCardHolderBean>(); MyBusiCardHolderBean mbchBean = new MyBusiCardHolderBean(); mbchBean.setCompanyName("深圳市远望谷信息技术股份有限公司"); mbchBean.setGetcardTime("2014.08.11 11:52:08"); mbchBean.setExhibitionName("物联网博览会"); mbchBean.setCompanyPhonenum("电话:0755-26711633"); list.add(0, mbchBean); MyBusiCardHolderBean mbchBean1 = new MyBusiCardHolderBean(); mbchBean1.setCompanyName("大唐电信科技各分有限公司"); mbchBean1.setGetcardTime("2014.08.11 12:20:05"); mbchBean1.setExhibitionName("物联网博览会"); mbchBean1.setCompanyPhonenum("电话:010-58919000"); list.add(1, mbchBean1); MyBusiCardHolderBean mbchBean2 = new MyBusiCardHolderBean(); mbchBean2.setCompanyName("天津中兴智联科技有限公司"); mbchBean2.setGetcardTime("2014.08.11 08:50:12"); mbchBean2.setExhibitionName("物联网博览会"); mbchBean2.setCompanyPhonenum("电话:022-84809202"); list.add(2, mbchBean2); MyBusiCardHolderBean mbchBean3 = new MyBusiCardHolderBean(); mbchBean3.setCompanyName("美国意联科技有限公司"); mbchBean3.setGetcardTime("2014.08.11 08:50:12"); mbchBean3.setExhibitionName("物联网博览会"); mbchBean3.setCompanyPhonenum("电话:+86-21-62122066"); list.add(3, mbchBean3); MyBusiCardHolderBean mbchBean4 = new MyBusiCardHolderBean(); mbchBean4.setCompanyName("深圳德卡科技有限公司"); mbchBean4.setGetcardTime("2014.08.11 08:20:12"); mbchBean4.setExhibitionName("物联网博览会"); mbchBean4.setCompanyPhonenum("电话:400-888-7816"); list.add(4, mbchBean4); return list; } public ArrayList<HashMap<String,Object>> getItem(){ ArrayList<HashMap<String, Object>> item = new ArrayList<HashMap<String, Object>>(); MyBusiCardHolderBean mbchBean = new MyBusiCardHolderBean(); for (int i = 0; i < getmylist().size(); i++) { mbchBean = getmylist().get(i); HashMap<String, Object> map = new HashMap<String, Object>(); map.put("companyname", mbchBean.getCompanyName()); map.put("getcardtime", mbchBean.getGetcardTime()); map.put("exhibitionname", mbchBean.getExhibitionName()); map.put("companyphonenum", mbchBean.getCompanyPhonenum()); item.add(map); } return item; } private void setAction() { // //点击了立即体验,通过获取本机的蓝牙作为唯一标识 // btnMenu.setOnClickListener(new View.OnClickListener() { // // @Override // public void onClick(View v) { // // //待完成...... // } // }); // btnSubmit.setOnClickListener(new View.OnClickListener() { // // @Override // public void onClick(View v) { // if(checkET()){ // submit(); // } // // } // }); } }
以下是popupwindow的页面布局,名称:popupwindow_busicardholder.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="horizontal" 4 android:layout_width="180dip" 5 android:layout_height="50dip" 6 android:gravity="center" 7 android:background="@drawable/layout_sub_itempress_bg" 8 > 9 <Button 10 android:layout_width="60dip" 11 android:layout_height="50dip" 12 android:id="@+id/dailphonenumber" 13 android:layout_gravity="center" 14 android:background="@drawable/busicardholder_phonecall_press_bg"> 15 </Button> 16 <Button 17 android:layout_width="60dip" 18 android:layout_height="50dip" 19 android:id="@+id/checkbusicard" 20 android:layout_gravity="center" 21 android:background="@drawable/busicardholder_checkcard_press_bg"> 22 </Button> 23 <Button 24 android:layout_width="60dip" 25 android:layout_height="50dip" 26 android:id="@+id/checkcompany" 27 android:layout_gravity="center" 28 android:background="@drawable/busicardholder_phonecall_press_bg"> 29 </Button> 30 </LinearLayout>
下面是popupwindow,具体名称是:BusicardPopupWindow
package com.cn.gordon.exhibition.walk.popup; import com.cn.gordon.exhibition.walk.activity.R; import com.cn.gordon.exhibition.walk.application.GlobalVaries; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.PopupWindow; import android.widget.RelativeLayout.LayoutParams; public class BusicardPopupWindow extends PopupWindow { private View contentView; private String telNum=""; public BusicardPopupWindow(final Activity context){ LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); contentView = inflater.inflate(R.layout.popupwindow_busicardholder, null); //int h = context.getWindowManager().getDefaultDisplay().getHeight(); int w = context.getWindowManager().getDefaultDisplay().getWidth(); // 设置SelectPicPopupWindow的View this.setContentView(contentView); // 设置SelectPicPopupWindow弹出窗体的宽 this.setWidth(w / 2 + 50); // 设置SelectPicPopupWindow弹出窗体的高 this.setHeight(LayoutParams.WRAP_CONTENT); // 设置SelectPicPopupWindow弹出窗体可点击 this.setFocusable(true); this.setOutsideTouchable(true); // 刷新状态 this.update(); // 实例化一个ColorDrawable颜色为半透明 ColorDrawable dw = new ColorDrawable(0000000000); // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作 this.setBackgroundDrawable(dw); // mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog); // 设置SelectPicPopupWindow弹出窗体动画效果 //this.setAnimationStyle(R.style.AnimationPreview); Button btn_dailnumber = (Button)contentView.findViewById(R.id.dailphonenumber); Button btn_checkcard = (Button)contentView.findViewById(R.id.checkbusicard); Button btn_checkcompany = (Button)contentView.findViewById(R.id.checkcompany); btn_dailnumber.setOnClickListener(new OnClickListener() { final GlobalVaries globalTelNum = (GlobalVaries) context.getApplication(); @Override public void onClick(View v) { if (globalTelNum!=null) { telNum = globalTelNum.getTelNum(); } Uri uri = Uri.parse("tel:"+telNum); Intent intent = new Intent(Intent.ACTION_DIAL,uri); v.getContext().startActivity(intent); BusicardPopupWindow.this.dismiss(); } }); btn_checkcard.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub BusicardPopupWindow.this.dismiss(); } }); btn_checkcompany.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { BusicardPopupWindow.this.dismiss(); } }); } public void showPopupWindow(View parent) { if (!this.isShowing()) { // 以下拉方式显示popupwindow this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18); } else { this.dismiss(); } } }
本文主要是讲述Activity通过全局变量把数据给popupwindow。仅供参考。同时也感谢那些无私向互联网上发技术贴的童鞋。
参考资料:http://blog.csdn.net/feiyangxiaomi/article/details/9966215
http://blog.csdn.net/junjieking/article/details/7352571
http://blog.csdn.net/l_serein/article/details/6398342
http://bbs.csdn.net/topics/360052162
http://www.oschina.net/question/157182_46417
无论遇到什么问题,解决不了,那就找AndroidAPI。