11

मेरी सूची दृश्य पॉपअपविंडो के अंदर है।पॉपअपविंडो ऑनिटैक्लिक में एंड्रॉइड लिस्टव्यू कुछ डिवाइस पर काम नहीं करता

जब मैंने पॉपअपविंडो दिखाया और डिवाइस ASUS K00z फोनेपैड वर्क में सूची दृश्य पंक्ति पर क्लिक किया।

लेकिन एचटीसी Z715e में काम नहीं कर रहा (क्लिक करें onitem नहीं निकाल घटना)

1.This मेरी सूचीदृश्य आइटम लेआउट है

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ln_testpopitemcon" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="52dp" 
    android:background="#3b8ed4" 
    android:descendantFocusability="blocksDescendants"> 

<ImageView 
    android:id="@+id/img_testiconmenu" 
    android:layout_margin="10dp" 
    android:layout_width="32dp" 
    android:layout_height="32dp" 
    android:src="@drawable/radio_selected" 
    android:clickable="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false"/> 

    <TextView 
     android:id="@+id/tv_testtitlemenu" 
     android:gravity="left|center_vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:clickable="false" 
     android:focusable="false" 
     android:focusableInTouchMode="false"/> 

</LinearLayout> 

2. इस मेरी पॉपअप लेआउट है

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ln_testpopocontainer" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:paddingLeft="2dp" 
     android:paddingRight="2dp" 
     android:paddingBottom="2dp" 
     android:id="@+id/lv_testpop" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:choiceMode="singleChoice" 
     android:dividerHeight="2dp" 
     android:background="#00000000" 
     android:orientation="vertical"/> 

</LinearLayout> 

3. यह मेरा एडाप्टर

public class testmenuadapter extends BaseAdapter{ 
    private Context context; 
    private ArrayList<MenuInfo> MenuList; 
    private LayoutInflater Layf; 

    public testmenuadapter(Context context, ArrayList<MenuInfo> menuList){ 
     this.context = context; 
     this.MenuList = menuList; 
     this.Layf = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     return MenuList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return MenuList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = Layf.inflate(R.layout.testpopoitem, null); 

      holder.img_testiconmenu = (ImageView)convertView.findViewById(R.id.img_testiconmenu); 
      holder.tv_testtitlemenu = (TextView)convertView.findViewById(R.id.tv_testtitlemenu); 
      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder)convertView.getTag(); 
     } 

     MenuInfo info = MenuList.get(position); 

     if(info != null) { 
      if (holder.tv_testtitlemenu != null) { 
       holder.tv_testtitlemenu.setText(info.getTitle()); 
      } 
     } 

     return convertView; 
    } 

    public class ViewHolder 
    { 
     ImageView img_testiconmenu; 
     TextView tv_testtitlemenu; 
    } 
} 

4. इस कोड मैं बनाने के लिए उपयोग और शो पॉपअप है

final View actionview = inflater.inflate(R.layout.testpopo, (ViewGroup)getActivity().findViewById(R.id.ln_testpopocontainer)); 
this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
this.testpopup.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
this.testpopup.setOutsideTouchable(false); 
this.testpopup.setAnimationStyle(R.style.Animation); 

this.testpopuplistview = (ListView)this.testpopup.getContentView().findViewById(R.id.lv_testpop); 

this.testmenupopup = new ArrayList<MenuInfo>(); 
this.testmenupopup.add(new MenuInfo("aaa", "AAA", 0, 0, false)); 
this.testmenupopup.add(new MenuInfo("bbb", "BBB", 0, 0, false)); 
this.testmenupopup.add(new MenuInfo("ccc", "CCC", 0, 0, false)); 

this.testpopadapter = new testmenuadapter(getActivity(), this.testmenupopup); 

this.testpopuplistview.setAdapter(this.testpopadapter); 
this.testpopuplistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
     Toast.makeText(getActivity(), ((MenuInfo)adapterView.getItemAtPosition(position)).getTitle(), Toast.LENGTH_LONG).show(); 
    } 
}); 

Button btnshowpop = (Button)findViewById(R.id.btn_showpop); 
btnshowpop.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     testpopup.showAtLocation(rootView, Gravity.CENTER, 0, 0); 
    } 
}); 

यह

संपादित मैं अपने समस्या को हल कर सकते हैं हल करने के लिए कैसे।

this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); 

अपशिष्ट समय के लिए खेद के साथ बदलें

this.testpopup = new PopupWindow(actionview, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

मैं बहुत मूर्ख हूँ।

+1

मैं अपने समस्या को हल कर सकते हैं तो कृपया नीचे देख प्रश्न में संपादित करें। – user2955394

+1

बहुत बहुत धन्यवाद, मैं अपने सिर को दो दिनों से खरोंच कर रहा था, और अंत में मुझे आपका समाधान मिला, यह कमाल काम करता है। –

+0

धन्यवाद!यह मेरा समय बचाया – Dima

उत्तर

1

आप एक ListView के लिए के बजाय ListAdapter उपयोग करने के लिए BaseAdapter चाहते हैं, और यह सच है लौटने areAllItemsEnabled और वर्ग कि ListAdapter लागू करता है में isItemEnabled के लिए कर सकते हैं।

कुछ इस तरह ...

class CustomListAdapter implements ListAdapter { 

    Activity callingActivity; 
    ArrayList<String> items; 

    public CustomListAdapter(Activity act, ArrayList<String> list) 
    { 
     callingActivity = act; 
     items = list; 
    } 

    @Override 
    public void registerDataSetObserver(DataSetObserver observer) { 
    } 

    @Override 
    public void unregisterDataSetObserver(DataSetObserver observer) { 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return items.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public boolean hasStableIds() { 
     return false; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT); 

     LinearLayout ll = new LinearLayout(callingActivity); 
     ll.setLayoutParams(params); 
     ll.setGravity(Gravity.CENTER); 
     ll.setOrientation(LinearLayout.HORIZONTAL); 
     ll.setPadding(5, 5, 5, 5); 

     // 
     // Code for your list item here... 
     // 

     return ll; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return 0; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 1; 
    } 

    @Override 
    public boolean isEmpty() { 
     return false; 
    } 

    @Override 
    public boolean areAllItemsEnabled() { 
     return true; 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     return true; 
    } 

} 

गुड लक। :)

+0

यह मेरे लिए काम नहीं कर रहा है –

3

आप पॉपअप मेनू के बजाय संदर्भ मेनू बना सकते हैं, यह इस तरह काम करता है। इस लिंक Creating Contextual Menus का उल्लेख में

http://developer.android.com/guide/topics/ui/menus.html#context-menu

: संदर्भ मेनू बनाने के लिए इस लिंक का संदर्भ लें।

इस तरह यू संदर्भ मेनू में जोड़ सकते हैं इस पर exanple क्रमबद्ध ------ पहले की तरह onclicklistener में यह रजिस्टर

registerForContextMenu (दृश्य)

for oncreate 
    @Override  
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) 
{ 
     menu.add(Menu.NONE, CONTEXT_MENU_UNPAIR_ITEM, Menu.NONE, "UNPAIR"); 
     menu.add(Menu.NONE, DEFAULT_DEVICE, Menu.NONE, "USE AS CGM DEVICE");   
    } 

For item selected in context menu 
@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
switch (item.getItemId()) 
{ 
case CONTEXT_MENU_UNPAIR_ITEM: 
//whatever u want 
break 
case DEFAULT_DEVICE: 
//whatever your logic accordind to u 
return(true); 
} 
return(super.onOptionsItemSelected(item)); 
}        
संबंधित मुद्दे