所以我猜这个问题不仅与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);
}
有什么建议吗?感谢。
答案 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);
}