0

所以我想这个问题不仅与任何控制有关,ImageView而且与任何控制有关。

在我的应用程序中,我列出了一个文件夹中的所有 .mp3 文件,并ImageView为每个添加到我的表单中的文件创建一个。这些ImageViews基本上只是图标,单击它们会触发正在播放的声音剪辑。

记住导致ImageView创建的 .mp3 文件名的最佳方法是什么,以便我可以在 .mp3 的OnClick()处理程序中再次获取该文件ImageView

以下是 ImageView 的创建方式:

File[] files = myPath.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".mp3");
    }
});
for (File file : files)
{
    ImageView imageView = new ImageView(this);
    imageView.setImageResource(R.drawable.sound_icon);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view)
        {
            // Here I would like to reference file.getAbsolutePath() which
            // I obviously can't so I need to find some way of "remembering"
            // it for this particular ImageView
        }
    });
    myLayout.addView(imageView);
}

有什么建议么?谢谢。

4

3 回答 3

4

您可以使用.setTag()?接受对象的方法。

试试这个:

 imageView.setTag(file);

链接到文档:http: //developer.android.com/reference/android/view/View.html#setTag%28int,%20java.lang.Object%29

于 2013-09-17T05:50:24.890 回答
1

为什么不只是这个?只需将file变量声明为final,然后您就可以从OnClickListener.

for (final File file : files)
{
    ImageView imageView = new ImageView(this);
    imageView.setImageResource(R.drawable.sound_icon);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view)
        {
            System.out.println(file.getAbsolutePath());
        }
    });
}
于 2013-09-17T05:55:51.170 回答
0

你可以不用 setTag() 也可以这样做

for (File file : files)
{
    final File myFile = file;
    ImageView imageView = new ImageView(this);
    imageView.setImageResource(R.drawable.sound_icon);
    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view)
        {
             myFile.getgetAbsolutePath();

            // Here I would like to reference file.getAbsolutePath() which
            // I obviously can't so I need to find some way of "remembering"
            // it for this particular ImageView
        }
    });
    myLayout.addView(imageView);
}
于 2013-09-17T05:57:47.043 回答