Как я могу получить доступ к своему экземпляру GridView из моего диалога (Android)? - PullRequest
0 голосов
/ 05 января 2012

У меня проблема с моим приложением для Android.Вероятно, это простая проблема с Java, но я недостаточно хорошо знаю Java, чтобы знать, что гуглить.Ниже приведена упрощенная версия того, что у меня есть, которая иллюстрирует мою проблему.Я хочу иметь возможность доступа к gridview из моего диалога.Понятно, что у меня здесь не так.Я попытался переместить объявление за пределы метода onCreate, но затем мое приложение вылетает в самом начале (сообщения об ошибке нет).Я также попытался добавить его в качестве аргумента к ShowDialog, но, думаю, поскольку я переопределяю эту функцию, которая не работала.Как вы, вероятно, можете сказать, я не знаю, что я делаю.Мысли?

public class HelloGridView extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));
        ((ImageAdapter) gridview.getAdapter()).initializemThumbIds();

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                showDialog(0);
            }
        });
    }

    protected Dialog onCreateDialog(int id) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("?")
               .setCancelable(false)
               .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       gridview.setAdapter(new ImageAdapter(this));  // gridview cannot be resolved
                       dialog.cancel();
                   }
               })
               .setNegativeButton("No", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       HelloGridView.this.finish();
                   }
               });
        AlertDialog diag = builder.create();
        return diag;
    }
}

1 Ответ

1 голос
/ 05 января 2012

Я думаю, что у вас просто нет правильной области видимости, поэтому ниже я сделал gridView переменной-членом.Но я думаю, что вы действительно хотите сделать, это сделать ваш ImageAdapter переменной-членом и обновлять ImageAdapter только в диалоге «Да».

public class HelloGridView extends Activity {
private GridView gridview;
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));
    ((ImageAdapter) gridview.getAdapter()).initializemThumbIds();

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            showDialog(0);
        }
    });
}

protected Dialog onCreateDialog(int id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   gridview.setAdapter(new ImageAdapter(this));  // gridview cannot be resolved
                   dialog.cancel();
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   HelloGridView.this.finish();
               }
           });
    AlertDialog diag = builder.create();
    return diag;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...