Android 向ImageView添加额外信息

Android 向ImageView添加额外信息,android,imageview,Android,Imageview,所以我想这个问题不仅仅是关于ImageView,而是关于任何控件 在我的应用程序中,我列出文件夹中的所有.mp3文件,并为每个文件创建一个ImageView,并将其添加到我的表单中。这些imageview基本上只是图标,单击这些图标将触发正在播放的声音片段 要记住导致创建ImageView的.mp3文件名,以便我可以在ImageView的OnClick()处理程序中再次获取该文件,最好的方法是什么 以下是ImageView的创建方式: File[] files = myPath.listFile

所以我想这个问题不仅仅是关于
ImageView
,而是关于任何控件

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

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

以下是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);
}

有什么建议吗?谢谢。

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

试试这个:

 imageView.setTag(file);

链接到文档:

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

试试这个:

 imageView.setTag(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());
        }
    });
}

为什么不仅仅是这个?只需将
文件
变量声明为
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());
        }
    });
}

不使用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);
}

不使用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);
}

美好的我不知道你可以在
for
语句中使用最后一个修饰符。这是一个完美而优雅的解决方案,适合我在这里尝试实现的目标,但我接受.setTag()答案,因为它更通用。谢谢你。我学到了一些东西,很好!我不知道你可以在
for
语句中使用最后一个修饰符。这是一个完美而优雅的解决方案,适合我在这里尝试实现的目标,但我接受.setTag()答案,因为它更通用。谢谢你。我学到了一些东西。