java - Android 在 onClick AlertDialog 中丢失引用

标签 java android reference onclick android-alertdialog

我之前曾将数据传入/传出对话框,但这让我很难理解问题所在。

调用 onClick 方法时,mylocalDataRef 的值会丢失。这个想法是只显示级别的名称,因为 AlertDialog 的输入仅为 String[]。当用户单击某个级别时,我使用 mylocalDataRef.get(item) 来检索完整对象并将其发送到 Activity 。

调试时,mylocalDataRef不为null,即调用get()方法时不会崩溃,但看不到它的值(就好像它是null一样),并且get()的返回结果始终为null .

任何人都可以阐明正在发生的事情吗?

附: showLevels() 在 onOptionsItemSelected() 中调用,即当用户单击操作栏上的菜单按钮时。

   private void showLevels()
   {
        final ArrayList<Level> mylocalDataRef = levels;
        String[] simpleLevels = new String[mylocalDataRef.size()];
        for(int i = 0; i < mylocalDataRef.size(); i++)
        {
            simpleLevels[i] = mylocalDataRef.get(i).getName();
        }

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a level");
        builder.setItems(mylocalDataRef, new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface dialog, int item)
            {
                Intent i = new Intent(getBaseContext(), LevelActivity.class);
                i.setAction(Intent.ACTION_VIEW);
                i.putExtra("result", mylocalDataRef .get(item).getId());
                i.putExtra("levelname", mylocalDataRef .get(item).getName());
                i.putExtra("type", "level");
                startActivity(i);
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    }

最佳答案

半解决它。

onClick 中 mylocalDataRef 的值不为 null,并且确实包含正确的数据。我怀疑有问题的原因是 Activity 中的 getExtras 没有得到正确的答案。这归因于使用 getStringExtra 而不是 getIntExtra。

为什么调试器看不到 mylocalDataRef 的值超出了我的范围,它使它看起来像 null。所以我将其打印到日志控制台以证明数据在那里。

关于java - Android 在 onClick AlertDialog 中丢失引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826776/

相关文章:

java - launch() 需要时间来运行

java - FFMPEG 远程 IP 摄像机通过 RTSP h.264 格式到 HLS 本地主机 m3u8 格式

java - java实现归并排序出错?

android - Unresolved kotlin android 扩展

c# - Xamarin Studio iOS 程序集错误

java - 如何在 java 中使用 Windows 凭据自动登录?

android - 无法在aidl中导入android.net.NetworkInfo

java - setTextColor 的参数是一个 int 但可以接受 8 位十六进制值是怎么回事?

c++ - 这种在 DLL 中初始化数组的设计有什么问题吗?

c - 如何将 char* 发送到函数并让它更改 C 中 char* 的内容?