Anroid关于fragment控件设置长按事件无法弹出Popupwindows控件问题解决记录
一、问题描述
????记录一下最近在安卓的gragment控件中设置长按事件遇见的一个坑!!!
????在正常的activity中整个活动中设置长按事件我通常实例化根部局,例如LinearLayout longSetting = (LinearLayout) view.findViewById(R.id.testlong);
,然后对变量longSetting
调用setOnLongClickListener
函数实现注册长按事件,但是在一个fragment控件中如此设置长按无法弹出popupwindows控件。在fragment控件无法实现长按事件弹出popwindows控件的代码如下:
布局代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/LongSet" android:orientation="vertical" android:layout_height="match_parent"> <ListView android:id="@+id/chat" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
java代码:
View view = inflater.inflate(R.layout.chat,container,false); LinearLayout longSetting = (LinearLayout) view.findViewById(R.id.LongSet); longSetting.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { showPop(); return true; } });
二、解决方法
????解决方法也很迷!!!经过实验发现在根布局中再镶嵌一个布局把所有的控件装进去,然后将这个镶嵌的控件实例化,然后对该布局设置长按事件弹出popupwindows控件即可!!!相关代码如下:
XML代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/LongSet" android:orientation="vertical" android:layout_height="match_parent"> <LinearLayout android:id="@+id/testlong" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/chat" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout>
java代码:
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.chat,container,false); LinearLayout longSetting = (LinearLayout) view.findViewById(R.id.testlong); longSetting.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { showPop(); return true; } }); ListView lv = (ListView)view.findViewById(R.id.chat); mdata = new LinkedList<RecvData>(); recvItem = new RecvItem(mdata,getActivity()); lv.setAdapter(recvItem); RecvMsgFromServer recvMsgFromServer = new RecvMsgFromServer(handler); recvMsgFromServer.start(); return view; } public void showPop() { View contentView = getActivity().getLayoutInflater().inflate(R.layout.pop,null); mPopWindow = new PopupWindow(contentView,ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT, true); mPopWindow.setContentView(contentView); TextView btn_send = (TextView)contentView.findViewById(R.id.send); TextView btn_cancle = (TextView)contentView.findViewById(R.id.exit); btn_cancle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopWindow.dismiss(); } }); btn_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPopWindow.dismiss(); alertDialog = new AlertSendMessage(getActivity(),handler).getAlert(); alertDialog.show(); } }); ColorDrawable colorDrawable = new ColorDrawable(0xb0000000); mPopWindow.setBackgroundDrawable(colorDrawable); mPopWindow.setAnimationStyle(R.style.PopDh); View rootview = getActivity().getLayoutInflater().inflate(R.layout.chat,null); mPopWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0); }
成功截图如下:
相关推荐
huha 2020-10-16
xfcyhades 2020-11-20
sgafdsg 2020-11-04
Michael 2020-11-03
fengyeezju 2020-10-14
ziyexiaoxiao 2020-10-14
业余架构师 2020-10-09
OuNuo0 2020-09-29
moses 2020-09-22
Angelia 2020-09-11
qinxu 2020-09-10
刘炳昭 2020-09-10
Nostalgiachild 2020-09-07
Nostalgiachild 2020-08-17
leavesC 2020-08-14
一青年 2020-08-13
AndroidAiStudy 2020-08-07
ydc0 2020-07-30