0

我有一个简单的应用程序,当您单击 GridView 中的图像时,会弹出一个对话框,其中包含一个显示“视图”的按钮。当您单击按钮时,我想查看已在图库中单击的图像。当我让应用程序在没有对话框的情况下导航到图库时,我可以毫无问题地让它工作,但我需要它首先点击一个对话框。我的 LogCat 正在返回的错误Java.lang.ArrayIndexOutOfBoundsExeption。关于我需要做什么来查看图像的任何想法?下面是我的代码。

public void onClick(View v) {
  Dialog dia = new Dialog(ViewGrid.this);
  dia.setContentView(R.layout.viewimage);
  dia.setTitle("What To Do?");
  dia.show(); 
  dia.setCancelable(true);
  Button button = (Button)dia.findViewById(R.id.viewImage);
  button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      int id = v.getId(); 
      Intent intent = new Intent();  
      intent.setAction(Intent.ACTION_VIEW);     
      intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
      startActivity(intent);
    }
  }); 
}

我在这一行收到错误:

intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");

我想到了!下面的代码是工作代码。我需要将我从视图中获得的 ID 设置为单击图像,而不是单击视图按钮。谢谢大家的帮助!

public void onClick(final View viewIt) {
  Dialog dia = new Dialog(ViewGrid.this);
  dia.setContentView(R.layout.viewimage);
  dia.setTitle("What To Do?");
  dia.show(); 
  dia.setCancelable(true);
  Button button = (Button)dia.findViewById(R.id.viewImage);
  button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
      int id = viewIt.getId(); 
      Intent intent = new Intent();  
      intent.setAction(Intent.ACTION_VIEW);     
      intent.setDataAndType(Uri.parse("file://" + arrPath[id]), "image/*");
      startActivity(intent);
    }
  }); 
}
4

4 回答 4

0

不确定,但我相信dia.show();应该在最后调用 - 即在view.setOnClickListener之后。

于 2013-04-14T01:52:07.227 回答
0

这个 ArrayIndexOutOfBoundsException 是从哪里抛出的?我假设它在您访问 arrPath[i] 时被抛出。您如何认为视图的 id 应该是 arrPath 的索引?这似乎是问题所在。

于 2013-04-14T02:50:27.617 回答
0

尝试打印

arrPath[id]

你应该得到同样的错误。正如 Sky Kelsey 提到的,视图 id 作为数组的索引有问题。

如果文件路径是例如

File file = new File("/sdcard/yourfile-VIEWID.jpg");

然后尝试而不是使用数组来保存路径,做一些事情

File file = new File("/sdcard/yourfile-"+String.valueof(id)+".jpg");
于 2013-04-14T10:59:56.773 回答
0

我已经找出了问题并在问题上方发布了我的正确代码。感谢所有帮助过的人。

于 2013-04-16T20:56:39.633 回答