Did some testing, Removing all Menu item views from LinearLayout after
PopupWindow dismiss and creating new items again if showing, no problem
found, But why? ScrollerView, LinearLayout and menu item views are all
created dynamically, why can't we reuse menu item views? why their ids are
0 after dismiss popupwindow? who did it? Did I miss something in my codes?
Thanks & Regards,
Chao
On Monday, April 21, 2014 2:41:07 PM UTC+8, chaozh wrote:
>
> I'm using PopupWindow to develop a Menu style UI. The content view of
> PopupWindow is created programmatically. The outer view is a scrollview and
> it has a new LinearLayout, the fragment codes is like:
> public class ContainerView extends ScrollView {
> ...
> public ContainerView(Context context) {
> super(context);
> init();
> }
> public ContainerView(Context context, AttributeSet attrs) {
> super(context, attrs);
> init();
> }
>
> private void init() {
>
> ...
>
> mContentView = new LinearLayout(getContext());
>
> mContentView.setOrientation(LinearLayout.VERTICAL);
>
> FrameLayout.LayoutParams layoutParams = new
> FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
> LayoutParams.WRAP_CONTENT);
>
> layoutParams.bottomMargin = mArrowHeight;
> addView(mContentView, layoutParams);
>
> }
>
> I just want to dynamically create Menu item before showing PopupWindow, so
> my codes can accept a user customized Menu item layout and inflate it when
> user call addMenu function.
> But I also want to reuse Menu item view if user dismiss PopupWindow and
> reshow again! So I setVisibility with GONE when PopupWindow is dismissed
> and visible it when addMenu is called, the codes just like:
> public void addMenu(int id, String title, Drawable d) {
> View v = mContainerView.getMenuView(mMenus.size());
> mMenus.add(new MenuItem(id, title, d));
> if (null != v) {
> v.setVisibility(View.VISIBLE);
> } else {
> v = ((Activity)mContext).getLayoutInflater().inflate(mMenuResId, null);
> mContainerView.addMenuView(v);
> }
> * TextView text = (TextView)v.findViewById(mTextResId);*
> text.setText(title);
> text.setId(id);
> text.setOnClickListener(mViewOnClickListener);
> if (mImageResId > 0) {
> ImageView img = (ImageView)v.findViewById(mImageResId);
> img.setImageDrawable(d);
> img.setId(id);
> img.setOnClickListener(mViewOnClickListener);
> }
> }
> The Menu window can display without any error at the first time, but if
> dismiss it(touch screen out of PopupWindow) and click button to show it
> again, the exception is raised. The TextView object in the bold line is
> null. I debugged and the Menu item view is valid and also contains a valid
> TextView, but the id of *TextView is 0, *Why? I don't know who reset the
> id the TextView. I added breakpoint in onDismiss listener and found the ids
> of all Menu item view are cleared. I have no idea about it. Could you
> please help me take a look? How could I fix it?
> Thanks a lot!
>
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
---
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.