向ImageView添加额外信息

时间:2013-09-17 05:48:18

标签: android imageview

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

在我的应用中,我将所有.mp3文件列在一个文件夹中,并为每个文件创建一个ImageView,并添加到我的表单中。这些ImageViews基本上只是图标,点击后会触发正在播放的声音片段。

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

以下是ImageViews的创建方式:

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);
}

有什么建议吗?感谢。

3 个答案:

答案 0 :(得分:3)

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

试试这个:

 imageView.setTag(file);

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

答案 1 :(得分: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());
        }
    });
}

答案 2 :(得分: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);
}