在这个里面可以左右切换,也可以弹窗选择。
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.但是弹出的窗口不能用鼠标点击,只能按键盘的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;
}
}
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;
}
}