不,它将根据您的列表视图/适配器的当前长度返回项目的位置。
为什么会很重要?
如果您想根据单击的项目启动不同的活动,有很多方法可以做到这一点。使用列表中的位置选择活动仅在位置固定时才有效,这不是您的情况,因为用户可以过滤项目。
相反,根据单击的项目的内容启动活动。
例如,您的列表视图使用以下项目填充:
public static final String [] PLANETS = {
"Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Uranus",
"Neptune",
};
使用以下内容ArrayAdapter
:
mAdapter = new ArrayAdapter<String>(this, R.layout.simple_list_item_1, R.id.text1, PLANETS);
OnItemClickListener
然后,您可以根据所选的实际行星而不是所选位置来编辑您的活动以开始活动。
private AdapterView.OnItemClickListener mOnPlanetOnItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int iistPosition, long l) {
//Notice I don't get the value from the String array
//Rather, I tell the adapter to give me the text from the selected item.
String planet = mAdapter.getItem(iistPosition);
Intent newActivity = new Intent(Example.this, NextActivity.class);
newActivity.putExtra("planet", planet);
}
};
如果您使用的是自定义适配器,那就更容易了。
编辑不幸的是,由于您的 mp3 文件的命名方式,您必须依赖列表位置来获取适当的文件。
在这种情况下,您可以尝试一些解决方法,例如:
- 如果您的列表视图填充了 set
ArrayList
或仅 a List
,您可以首先获取所选项目的文本,然后根据所选项目的文本获取实际的数组位置。
像这样:
private AdapterView.OnItemClickListener mOnPlanetOnItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int iistPosition, long l) {
//get the text of the current item
String planet = mAdapter.getItem(iistPosition);
//get the position of this planet in the original unfiltered array
int actualListPosition = PLANETS_ARRAY.indexOf(planet);
//handle the click based on the actualListPosition
}
};
我希望这会有所帮助