创建对话框时无法访问GridView onClick方法中的变量

问题描述 投票:0回答:1

我已经创建了一个GridView,并在“项目单击”上显示了AlertDialog,然后尝试获取单击的项目在AlertDialog按钮中的位置。但是收到警告,需要声明从内部类访问的变量为final。

这里是代码

public class DesignSelection extends AppCompatActivity {
    GridView gridView;
    int [] designs1   = {R.drawable.es,R.drawable.hole,R.drawable.ipx,R.drawable.op6,R.drawable.op7,R.drawable.pix,R.drawable.punch,R.drawable.spun};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_design_selection);

        gridView = findViewById(R.id.gridView);

       CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), designs1);
        gridView.setAdapter(customAdapter);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    AlertDialog.Builder ab = new AlertDialog.Builder(DesignSelection.this);
                    ab.setTitle("Alert!");
                    ab.setMessage("You may see an "+holder+"Add\n Buy Pro for not seeing these annoying Adds");
                    ab.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                    Toast.makeText(DesignSelection.this, "Now Clicked: " + position, Toast.LENGTH_LONG).show(); //getting error at position

                        }
                    });

                    ab.show();
            }
        });

    }

}
android gridview android-alertdialog
1个回答
0
投票

尝试一下

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {

            AlertDialog.Builder ab = new AlertDialog.Builder(DesignSelection.this);
            ab.setTitle("Alert!");
            ab.setMessage("You may see an "+holder+"Add\n Buy Pro for not seeing these annoying Adds");
            ab.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    Toast.makeText(DesignSelection.this, "Now Clicked: " + position, Toast.LENGTH_LONG).show(); //getting error at position

                }
            });

            ab.show();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.