listView  有拖动功能 当手指按下 进行拖动时 挥发現 其中内容是之前互换位置的数据 松手后 正常显示 小弟不明白 是哪里处理的不对 请教各位大侠

解决方案 »

  1.   

    代码 很长 两个JAVA文件 实在不知到 贴哪部分啊 先贴一部分吧 
    TrackListAdapter(Context context,
    EditTrackBrowserActivity currentactivity, int layout,
    Cursor cursor, String[] from, int[] to, boolean isnowplaying,
    boolean disablenowplayingindicator) {
    super(context, layout, cursor, from, to);
    mActivity = currentactivity;
    getColumnIndices(cursor);
    mIsNowPlaying = isnowplaying;
    mDisableNowPlayingIndicator = disablenowplayingindicator;
    mUnknownArtist = context.getString(R.string.unknown_artist_name);
    mUnknownAlbum = context.getString(R.string.unknown_album_name); mQueryHandler = new TrackQueryHandler(context.getContentResolver());
    }

    public void setActivity(EditTrackBrowserActivity newactivity) {
    mActivity = newactivity;
    } public TrackQueryHandler getQueryHandler() {
    return mQueryHandler;
    } private void getColumnIndices(Cursor cursor) {
    if (cursor != null) {
    mTitleIdx = cursor
    .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
    mArtistIdx = cursor
    .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);

    Log.d("Music05","getColumnIndices    mTitleIdx=>"+ mTitleIdx);
    Log.d("Music05","getColumnIndices    mArtistIdx=>"+ mArtistIdx);
    try {
    mAudioIdIdx = cursor
    .getColumnIndexOrThrow(MediaStore.Audio.Playlists.Members.AUDIO_ID);
    Log.d("Music05","getColumnIndices    mAudioIdIdx=>"+ mAudioIdIdx);
    } catch (IllegalArgumentException ex) {
    mAudioIdIdx = cursor
    .getColumnIndexOrThrow(MediaStore.Audio.Media._ID);
    } if (mIndexer != null) {
    mIndexer.setCursor(cursor);
    } else if (!mActivity.mEditMode) {
    String alpha = mActivity
    .getString(com.android.internal.R.string.fast_scroll_alphabet);
    Log.d("Music05","getColumnIndices    alpha=>"+ alpha);
    mIndexer = new MusicAlphabetIndexer(cursor, mTitleIdx,
    alpha);
    }
    }
    } @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
    if (DEBUG) {
    Log.d(TAG, "newView");
    }
    EditAbleRelativeLayout v = (EditAbleRelativeLayout) super.newView(context, cursor, parent);
    v.setOnEditAbleListItemDeleteListener(mItemDeleteListener); ViewHolder vh = new ViewHolder();
    vh.line1 = (TextView) v.findViewById(R.id.line1);
    vh.line2 = (TextView) v.findViewById(R.id.line2);

    vh.play_indicator = (ImageView) v.findViewById(R.id.play_indicator);
    vh.buffer1 = new CharArrayBuffer(100);
    vh.buffer2 = new char[200];
    v.setTag(vh);

    return v;
    } @Override
    public void bindView(View view, Context context, Cursor cursor) {
    if (DEBUG) {
    Log.d(TAG, "bindView");
    } if (DEBUG) {
    int temp = ((RelativeLayout.LayoutParams) ((RelativeLayout) view)
    .findViewById(R.id.line_layout).getLayoutParams()).leftMargin;
    Log.d(TAG, "leftMargin " + temp);
    }
    ViewHolder vh = (ViewHolder) view.getTag();

    cursor.copyStringToBuffer(mTitleIdx, vh.buffer1);
    vh.line1.setText(vh.buffer1.data, 0, vh.buffer1.sizeCopied); // int secs = (cursor.getInt(mDurationIdx)+500) / 1000;
    // if (secs == 0) {
    // vh.duration.setText("");
    // } else {
    // vh.duration.setText(MusicUtils.makeTimeString(context, secs));
    // } final StringBuilder builder = mBuilder;
    builder.delete(0, builder.length()); String name = cursor.getString(mArtistIdx);
    if (name == null || name.equals(MediaStore.UNKNOWN_STRING)) {
    builder.append(mUnknownArtist);
    } else {
    builder.append(name);
    }
    int len = builder.length();
    if (vh.buffer2.length < len) {
    vh.buffer2 = new char[len];
    }
    builder.getChars(0, len, vh.buffer2, 0);
    vh.line2.setText(vh.buffer2, 0, len);
    Log.d("Music05","bindView    vh=>"+ vh.line1.getText()+"    "+vh.line2.getText()+"     ");
    ImageView iv = vh.play_indicator;
    long id = -1;
    if (MusicUtils.sService != null) {
    // TODO: IPC call on each bind??
    try {
    if (mIsNowPlaying) {
    id = MusicUtils.sService.getQueuePosition();
    } else {
    id = MusicUtils.sService.getAudioId();
    }
    } catch (RemoteException ex) {
    }
    } if ((mIsNowPlaying && cursor.getPosition() == id)
    || (!mIsNowPlaying && !mDisableNowPlayingIndicator && cursor
    .getLong(mAudioIdIdx) == id)) {
    iv.setImageResource(R.drawable.playing_state_icon_3);
    iv.setVisibility(View.VISIBLE);
    } else {
    iv.setVisibility(View.INVISIBLE);
    } ((EditAbleRelativeLayout) view).updateViews(mActivity.mEditMode);
    } @Override
    public void changeCursor(Cursor cursor) {
    Log.d("Music05","changeCursor    =>");
    if (cursor.getCount() == 0) {
    mShufflePlayView.setVisibility(View.GONE);
    } else {
    mShufflePlayView.setVisibility(View.VISIBLE);
    }
    if (cursor != null || mActivity != null) {
    int count = cursor.getCount();
    if (DEBUG)
    Log.d(TAG, "changeCursor count");
    TextView countTV = (TextView) mActivity
    .findViewById(R.id.song_count_tv);
    if (count >= 20) {
    countTV.setText(count
    + mActivity.getString(R.string.song_count));
    countTV.setVisibility(View.VISIBLE);
    } else {
    countTV.setText("");
    countTV.setVisibility(View.GONE);
    }
    Log.d("Music05","changeCursor  countTV  =>"+countTV.getText().toString());
    }
    if (cursor != mActivity.mTrackCursor) {
    mActivity.mTrackCursor = cursor;
    super.changeCursor(cursor);
    getColumnIndices(cursor);
    }
    } public void forceChangeCursor(Cursor cursor) {
    mActivity.mTrackCursor = cursor;
    super.changeCursor(cursor);
    getColumnIndices(cursor);
    } @Override
    public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
    String s = constraint.toString();
    Log.d("Music05","changeCursor   s  =>"+ s);
    if (mConstraintIsValid
    && ((s == null && mConstraint == null) || (s != null && s
    .equals(mConstraint)))) {
    return getCursor();
    }
    Cursor c = mActivity.getTrackCursor(mQueryHandler, s, false);
    mConstraint = s;
    mConstraintIsValid = true;
    return c;
    } public Object[] getSections() {
    if (mIndexer != null) {
    return mIndexer.getSections();
    } else {
    return null;
    }
    } public int getPositionForSection(int section) {
    int pos = mIndexer.getPositionForSection(section);
    Log.d("Music05","changeCursor   pos   =>"+ pos );
    return pos;
    } public int getSectionForPosition(int position) {
    return 0;
    }
    }
      

  2.   

    数组保存的实体层改为用集合list来实现,试试。。