在这个里面可以左右切换,也可以弹窗选择。
1.但是弹出的窗口不能用鼠标点击,只能按键盘的enter键选择,想要鼠标也可以点击选择。
2.还有个问题,当项数多的时候,弹出的窗口中的选择项一直每次都是从第一个位置开始显示的,我想让他弹出的时候显示为当前已经选择的项开始显示。比如选择的h,弹出的时候看到是从h以后的项显示在弹窗正中,而不是aaa。
代码如下:
public class MainActivity extends Activity
{
    private static String[] strMenu = { "item1", "item2", "item3" };
    private static String[] strPop1 = { "aaa", "bbb", "ccc","d","e","f","g","h","j","k","l","m","n" };
    private static String[] strPop2 = { "ddd", "eee", "fff" };
    private static String[] strPop3 = { "ggg", "hhh", "iii" };
    
    List<Map<String, Object>> dataList;
    PopupWindow popWin;
    ListView mainList;
    ListView popList;
    ArrayAdapter<String> popaAdapter;
    MyAdapter myAdapter;
    int iItem = 0;
    int i = 0;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dataList = GetData();
        
        mainList = (ListView) findViewById(R.id.listViewMain);
        myAdapter = new MyAdapter(this);
        mainList.setAdapter(myAdapter);
        
        mainList.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                // TODO Auto-generated method stub
                
                switch (position)
                {
                    case 0:
                        InitPopWin(strPop1);
                        break;
                    
                    case 1:
                        
                        InitPopWin(strPop2);
                        break;
                    
                    case 2:
                        InitPopWin(strPop3);
                        break;
                    
                    default:
                        break;
                }
                if (popWin != null)
                {
                    iItem = position;
                    popWin.showAtLocation(view, Gravity.LEFT| Gravity.TOP, 200, 85);
                }
            }
            
        });
        
    }
    
    public void InitPopWin(String[] str)
    {
        LayoutInflater layoutInflater = (LayoutInflater) (MainActivity.this).getSystemService(LAYOUT_INFLATER_SERVICE);
        View popView = layoutInflater.inflate(R.layout.pop_list, null);
        
        popWin = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        popWin.setOutsideTouchable(false);
        popWin.setTouchable(false);
        popWin.setFocusable(true);
        popWin.setWidth(200);
        popWin.setHeight(300);
        
        popList = (ListView) popView.findViewById(R.id.listViewPop);
        popaAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, str);
        popList.setAdapter(popaAdapter);
                popList.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                // TODO Auto-generated method stub
                
                switch (iItem)
                {
                    case 0:
                        dataList.get(iItem).put("item1", strPop1[position]);
                        break;
                    
                    case 1:
                        dataList.get(iItem).put("item2", strPop2[position]);
                        break;
                    
                    case 2:
                        dataList.get(iItem).put("item3", strPop3[position]);
                        break;
                    
                    default:
                        break;
                }
                
                myAdapter.notifyDataSetChanged();
                popWin.dismiss();
            }
        });
    }
    
    private List<Map<String, Object>> GetData()
    {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map;
        int i = 0;
        
        for (i = 0; i < strMenu.length; i++)
        {
            map = new HashMap<String, Object>();
            
            map.put("menu", strMenu[i]);
            map.put("item1", strPop1[0]);
            map.put("item2", strPop2[0]);
            map.put("item3", strPop3[0]);
            list.add(map);
        }
        return list;
    }
    
    class MyAdapter extends BaseAdapter
    {
        private LayoutInflater mInflater;
        private Context mContext = null;
        
        public MyAdapter(Context context)
        {
            this.mContext = context;
            this.mInflater = LayoutInflater.from(mContext);
        }
        
        public int getCount()
        {
            // TODO Auto-generated method stub
            return dataList.size();
        }
        
        public Object getItem(int position)
        {
            // TODO Auto-generated method stub
            return position;
        }
        
        public long getItemId(int position)
        {
            // TODO Auto-generated method stub
            return position;
        }
        
        public View getView(int position, View convertView, ViewGroup parent)
        {
            // TODO Auto-generated method stub
            ViewHolder viewHolder;
            
            if (convertView == null)
            {
                viewHolder = new ViewHolder();
                convertView = mInflater.inflate(R.layout.main_item, null);
                viewHolder.menuItem = (TextView) convertView.findViewById(R.id.textView1);
                viewHolder.popItem = (TextView) convertView.findViewById(R.id.textView2);
                convertView.setTag(viewHolder);
            }
            else
            {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            
            viewHolder.menuItem.setText(dataList.get(position).get("menu").toString());
            
            switch (position)
            {
                case 0:
                    viewHolder.popItem.setText(dataList.get(position).get("item1").toString());
                    break;
                case 1:
                    viewHolder.popItem.setText(dataList.get(position).get("item2").toString());
                    break;
                case 2:
                    viewHolder.popItem.setText(dataList.get(position).get("item3").toString());
                    break;
                default:
                    break;
            }
            return convertView;
        }
        
    }

解决方案 »

  1.   


    public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                iItem = mainList.getSelectedItemPosition();
                if (iItem >= 0)
                {
                    switch (keyCode)
                    {
                        case KeyEvent.KEYCODE_DPAD_LEFT:
                            i -= 1;
                            if (i < 0)
                            {
                                switch (iItem)
                                {
                                    case 0:
                                        i = strPop1.length - 1;
                                        dataList.get(iItem).put("item1", strPop1[i]);
                                        break;
                                    case 1:
                                        i = strPop2.length - 1;
                                        dataList.get(iItem).put("item2", strPop2[i]);
                                        break;
                                    case 2:
                                        i = strPop3.length - 1;
                                        dataList.get(iItem).put("item3", strPop3[i]);
                                        break;
                                }
                            }
                            else 
                            {
                                switch (iItem)
                                {
                                    case 0:
                                        dataList.get(iItem).put("item1", strPop1[i]);
                                        break;
                                    case 1:
                                        dataList.get(iItem).put("item2", strPop2[i]);
                                        break;
                                    case 2:
                                        dataList.get(iItem).put("item3", strPop3[i]);
                                        break;
                                }
                            }
                            myAdapter.notifyDataSetChanged();
                            return true;
                        
                        case KeyEvent.KEYCODE_DPAD_RIGHT:
                            i += 1;
                            switch (iItem)
                            {
                                case 0:
                                    if (i > strPop1.length - 1)
                                    {
                                        i = 0;
                                    }
                                    dataList.get(iItem).put("item1", strPop1[i]);
                                    break;
                                case 1:
                                    if (i > strPop2.length - 1)
                                    {
                                        i = 0;
                                    }
                                    dataList.get(iItem).put("item2", strPop2[i]);
                                    break;
                                case 2:
                                    if (i > strPop3.length - 1)
                                    {
                                        i = 0;
                                    }
                                    dataList.get(iItem).put("item3", strPop3[i]);
                                    break;
                            }
                            
                            myAdapter.notifyDataSetChanged();
                            return true;
                        
                        default:
                            break;
                    }
                }
            }
            return super.onKeyDown(keyCode, event);
        }
        
        class ViewHolder
        {
            TextView menuItem;
            TextView popItem;
        }
    }