为AlertDialog中布局集内的按钮实现onClick()

时间:2012-06-02 16:16:49

标签: android nullpointerexception alertdialog buttonclick

我不知道为什么只要我的Button已初始化它就会得到NullPointerException。 这是我的代码。希望你们能帮忙。感谢

public boolean onOptionsItemSelected(MenuItem item)
{   switch (item.getItemId())
        {   
            case SEARCH:
                inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                AlertDialog.Builder search = new AlertDialog.Builder(this);
                search.setTitle(R.string.search);
                searchDialog = inflater.inflate(R.layout.search,null);
                search.setView(searchDialog);

                   //The problem should be here
                searchButton = (Button) findViewById(R.id.searchButton);
                   //R.id.searchButton is inside the layout, search.xml
                searchButton.setOnClickListener(new OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {   //For testing
                        Toast.makeText(getApplicationContext(), 
                                "Search was clicked!", Toast.LENGTH_SHORT).show();
                    }
                });
                AlertDialog searchDialog = search.create();
                searchDialog.show();
                return true;
                .
                .
                .

1 个答案:

答案 0 :(得分:1)

searchDialog = inflater.inflate(R.layout.search,null);

以上行已更改,并且要初始化按钮,您必须使用视图参考。

public boolean onOptionsItemSelected(MenuItem item)
{   switch (item.getItemId())
        {   
            case SEARCH:
                inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                AlertDialog.Builder search = new AlertDialog.Builder(YourActivity.this);
                search.setTitle(R.string.search);
                View view = inflater.inflate(R.layout.search,null);
                search.setView(view);

                   //The problem should be here
                searchButton = (Button)view.findViewById(R.id.searchButton);
                   //R.id.searchButton is inside the layout, search.xml
                searchButton.setOnClickListener(new OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {   //For testing
                        Toast.makeText(getApplicationContext(), 
                                "Search was clicked!", Toast.LENGTH_SHORT).show();
                    }
                });
                AlertDialog searchDialog = search.create();
                searchDialog.show();
                return true;
                .
                .
                .