listView 拖动 变换位置时 数据内容显示错误 当松开按键后 正常显示 listView 有拖动功能 当手指按下 进行拖动时 挥发現 其中内容是之前互换位置的数据 松手后 正常显示 小弟不明白 是哪里处理的不对 请教各位大侠 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码 很长 两个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; } } 数组保存的实体层改为用集合list来实现,试试。。 电脑做服务器,手机端做客户。在模拟器上能连接,但安装到手机上就连接不上 调用手机自带地图软件定位的问题 怎么做出这种效果的下拉框 ??? Sqlite中query的问题 android 怎么得到有内置id的控件 spinner问题 大家都来看看啊 我想往手机数据库联系人中存入联系人,能往直接往SIM卡里存就更好了 Android MediaRecoder 编解码问题 如何获取WebView内容高度 android 如何在wifi模式下 正确判断GPRS数据开关是否开启? Android里的Tab页面在切换屏幕后又切换Tab后,菜单仍然显示 android编程 怎样判断回铃和忙音
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;
}
}