Java里的AlertDialog_java – 在Android中扩展AlertDialog.Builder

我想创建一个扩展AlertDialog.Builder的类:

public class AlertBuilder extends AlertDialog.Builder {

private MultiAdapter mAdapter;

private ListView lv;

private Activity mActivity;

private Context mContext;

private CheckedTxtView checkedItem;

public AlertBuilder(Context context, Activity activity, final List mList) {

super(context);

this.mActivity = activity;

this.mContext = context;

this.setTitle("Test");

LayoutInflater inflater = activity.getLayoutInflater();

View dialoglayout = inflater.inflate(R.layout.main_filter, null);

this.setView(dialoglayout);

mAdapter = new MultiAdapter(context, mList);

lv = (ListView) dialoglayout.findViewById(R.id.list);

lv.setAdapter(mAdapter);

lv.setOnItemClickListener(new ItemClick());

}

class ItemClick implements OnItemClickListener {

public void onItemClick(AdapterView> parent, View view, int position, long id) {

checkedItem = mAdapter.mItems.get(position);;

mAdapter.notifyDataSetChanged();

}

}

private class MultiAdapter extends ArrayAdapter {

private List mItems;

public MultiAdapter(Context context, List mList) {

super(context, R.layout.list2, mList);

this.mItems = mList;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View row;

if (convertView == null) {

LayoutInflater inflater = mActivity.getLayoutInflater();

row = inflater.inflate(R.layout.list2, parent, false);

} else

row = convertView;

CheckedTextView txt = (CheckedTextView) row.findViewById(R.id.label);

CheckedTxtView c = mItems.get(position);

System.out.println(c.item);

txt.setText(c.item);

if(checkedItem != null && checkedItem.item != null)

txt.setChecked(c.item.equals(checkedItem.item));

return row;

}

}

然后我在我的Activity中使用它:

public class MainActivity extends Activity {

private List mList;

private AlertDialog mAlert;

private AlertDialog.Builder mAlertBuilder;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mList = new ArrayList();

for(int i=0; i<30; i++) {

CheckedTxtView c = new CheckedTxtView();

c.item = "item " + i;

mList.add(c);

}

mAlertBuilder = new AlertBuilder(getApplicationContext(), this, mList);

mAlert = mAlertBuilder.create();

Button mButton = (Button) this.findViewById(R.id.mButton);

mButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

mAlert.show();

}

});

}

}

我在控制台中收到此错误:

02-07 13:33:05.641: E/AndroidRuntime(12557): FATAL EXCEPTION: main

02-07 13:33:05.641: E/AndroidRuntime(12557): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.view.ViewRoot.setView(ViewRoot.java:566)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:179)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.app.Dialog.show(Dialog.java:265)

02-07 13:33:05.641: E/AndroidRuntime(12557): at com.example.testdialog.MainActivity$1.onClick(MainActivity.java:35)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.view.View.performClick(View.java:2533)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.view.View$PerformClick.run(View.java:9320)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.os.Handler.handleCallback(Handler.java:587)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.os.Handler.dispatchMessage(Handler.java:92)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.os.Looper.loop(Looper.java:150)

02-07 13:33:05.641: E/AndroidRuntime(12557): at android.app.ActivityThread.main(ActivityThread.java:4385)

02-07 13:33:05.641: E/AndroidRuntime(12557): at java.lang.reflect.Method.invokeNative(Native Method)

02-07 13:33:05.641: E/AndroidRuntime(12557): at java.lang.reflect.Method.invoke(Method.java:507)

02-07 13:33:05.641: E/AndroidRuntime(12557): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)

02-07 13:33:05.641: E/AndroidRuntime(12557): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)

02-07 13:33:05.641: E/AndroidRuntime(12557): at dalvik.system.NativeStart.main(Native Method)

我可能会想念这里.你能帮助我吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值