当前位置: 代码迷 >> Android >> 【100分可再加】关于listview整体上移,重写adaper的有关问题
  详细解决方案

【100分可再加】关于listview整体上移,重写adaper的有关问题

热度:96   发布时间:2016-05-01 11:04:37.0
【100分可再加】关于listview整体上移,重写adaper的问题。
本帖最后由 zhuyakk 于 2013-03-26 17:44:53 编辑
想完成这种效果:

比如默认播放第五行的音乐,鼠标点击第七行的时候,所有子项上移两行,即第一行到倒数第二行,第二行到最后一行,第三行到第一行……第七行到第五行,播放该行音乐……

private List<String> list;//存放音乐的路径,这里一共9个,都是从sd卡读取,路径名为:mnt/sdcard/music/idontwanttoleaveyoulone_mayday(歌名).map3
private List<String> temp;//存放鼠标点击前的音乐路径
        list = new ArrayList<String>();
temp= new ArrayList<String>();

listView绑定到MusicList创建的实例上,使用自定义的adapter:
	class MusicListAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@SuppressLint("NewApi")
@SuppressWarnings({ "deprecation", "unused" })
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.list_item,
null);
}
TextView tv_music_name = (TextView) convertView
.findViewById(R.id.textView1_music_name);
tempe=position;

tempe=position+orienIndex;
if(tempe>list.size()){
tempe=tempe%list.size();
}
else if(tempe<0){
tempe=list.size()+tempe;
}
list.set(position,temp.get(tempe));

//*********************************修改播放列表显示
tv_music_name.setTextColor(Color.WHITE);
tv_music_name.setText(list.get(position).substring(18).replace(".mp3", " ").replace("_", "-"));

return convertView;
}
}

temp在鼠标点击前初始化为temp.addAll(list);
监听的鼠标点击事件:
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
temp.clear();
currIndex = position;//
orienIndex=currIndex-FIXMUSICINDEX;//FIXMUSICINDEX表示固定播放第几行,这里为5
temp.addAll(list);
//***************************************
ma.notifyDataSetInvalidated();  
//***************************************
start();
}


然后就报错了:
FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 9, size is 9
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.example.musicly.MainActivity$MusicListAdapter.getView(MainActivity.java:157)

活动名是MainActivity 第157行是list.set(position,temp.get(tempe));

求大神解答~~

------解决方案--------------------
应该是tempe>=list.size()
------解决方案--------------------
 if(position==FIXMUSICINDEX){
}
else{
  相关解决方案