弹出列表对话框,选择列表项后返回结果并消失
最近的开发过程中,有选择时间段的需求,需要弹出一个列表对话框,用户选择完列表项之后返回用户选择结果,当前列表项消失。
首先,在res/layout文件夹定义一个列表项对应的布局文件以便加载:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/time_zone"
android:divider="#cccccc"
android:dividerHeight="1px" />
</LinearLayout>单击按钮,弹出该布局:
Button time = (Button) findViewById(R.id.time);
time.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
// LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout ll = (LinearLayout) getLayoutInflater().inflate(R.layout.time, null);
final ListView lv = (ListView) ll.findViewById(R.id.list);
AlertDialog.Builder builder = new AlertDialog.Builder(TabActivity_book.this)
// .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// ((Button)v).setText(items[which]);
//
// }
// });
.setView(ll);
dialog = builder.create();
dialog.show();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
time.setText(lv.getItemAtPosition(position).toString());
// ll.removeView(lv);
dialog.dismiss();
}
});
}
});注:如果把
LinearLayout ll = (LinearLayout) getLayoutInflater().inflate(R.layout.time, null); final ListView lv = (ListView) ll.findViewById(R.id.list);
这2段代码放在监听器方法的外面,则在单击按钮选择时间后再次单击,会报异常:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
原因是ListView既属于LinearLayout,而LinearLayout又是由Dialog弹出的——如果把加载页面和相应的列表项放在外面时,在第一次弹出列表框时,已经kill掉了dialog,这就间接kill掉了属于他的LinearLayout。当用户再次单击按钮试图再次加载该布局文件时,LinearLayout已经在上一次(第一次)被kill掉了(因为他是放在外面的)。所以报错!
解决办法则是把这2行代码放在监听器方法里面,每单击一次就重新创建一次Linearlayout,即加载布局文件,在用户选择列表项后,dismiss该弹出的对话框。
相关推荐
韩伟佳 2020-10-09
wuleihenbang 2020-09-16
zzqLivecn 2020-07-09
chenjinlong 2020-06-10
yinbaoshiguang 2020-06-09
sgafdsg 2020-06-04
ustcrding 2020-06-03
chenjinlong 2020-06-03
AndroidGA 2020-06-01
安辉 2020-05-27
绿豆饼 2020-05-26
CNETNews 2020-05-26
xilove0 2020-05-12
绿豆饼 2020-05-12
ChainDestiny 2020-05-07
doomvsjing 2020-05-07
hqulyc 2020-05-05
lyccsu 2020-04-30