Java 在Android中扩展AlertDialog.Builder

Java 在Android中扩展AlertDialog.Builder,java,android,Java,Android,我想创建一个扩展AlertDialog.Builder的类: public class AlertBuilder extends AlertDialog.Builder { private MultiAdapter mAdapter; private ListView lv; private Activity mActivity; private Context mContext; private CheckedTxtView checkedItem;

我想创建一个扩展
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<CheckedTxtView> 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<CheckedTxtView> {

        private List<CheckedTxtView> mItems;

        public MultiAdapter(Context context, List<CheckedTxtView> 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;
        }
    }

我可能会错过一些东西。您能帮助我吗?

使用this或MainActivity.this代替getApplicationContext()

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

您不应在此处传递应用程序的上下文:

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

因为活动本身就是上下文,所以应该将构造函数更改为只接受一个paramater-Activity,以后可以将其用作上下文对象

或者在更改
super(上下文)后尝试
超级(活动)因为您已经将活动上下文发送到AlertBuilder类
 mAlertBuilder = new AlertBuilder(this, this, mList);
 mAlertBuilder = new AlertBuilder(getApplicationContext(), this, mList);