前段時間我的問題很相似。我需要一個頁面,在那裏我可以重新安排條目(音樂歌曲曲目)。因此,這裏是我的實現:
我AllTracksFragment,允許重新排序跟蹤
public class AllTracksFragment extends SupportFragmentBase {
DynamicListView allTracksListView;
private ArrayList<Track> allTracksList = new ArrayList<>();
TracksListViewAdapter allTracksAdapter;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_all_tracks, container, false);
setHasOptionsMenu(true);
allTracksListView = (DynamicListView)rootView .findViewById(R.id.allTracksListView);
Track track1 = new Track(); // Track is simple model class
track1.trackName = "Winter\'s Coming (Acoustic) 1";
track1.trackId = "47580057";
Track track2 = new Track();
track2.trackName = "Winter\'s Coming (Acoustic) 2";
track2.trackId = "47580057";
Track track3 = new Track();
track3.trackName = "Winter\'s Coming (Acoustic) 3";
track3.trackId = "47580057";
allTracksList.add(track1);
allTracksList.add(track2);
allTracksList.add(track3);
allTracksAdapter = new TracksListViewAdapter(allTracksList, eventBus);
allTracksListView.setTracksList(allTracksList); //SEE DynamicListView class
allTracksListView.setAdapter(allTracksAdapter);
allTracksListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
return rootView;
}
}
而且AllTracksFragment佈局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.myapp.views.DynamicListView
android:id="@+id/allTracksListView"
android:layout_marginTop="12dp"
android:scrollbars="none"
android:divider="@null"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
TracksLi stViewAdapter(如果需要):
public final class TracksListViewAdapter extends BaseListViewArrayAdapter<PlayTrackView, Track> { // extended version of simple BaseAdapter
final int INVALID_ID = -1;
public TracksListViewAdapter(final List<Track> tracks) {
super(tracks == null ? new ArrayList<Track>(0) : tracks);
if (tracks != null) {
for (int i = 0; i < tracks.size(); ++i) {
mIdMap.put(tracks.get(i), i);
}
}
}
public PlayTrackView createNewView(final Context context, final int position) {
return new PlayTrackView(context); // PlayTrackView - is an extension of FrameLayout
}
HashMap<Track, Integer> mIdMap = new HashMap<>();
@Override
public long getItemId(int position) {
if (position < 0 || position >= mIdMap.size()) {
return INVALID_ID;
}
Track item = (Track) getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds()
{
return android.os.Build.VERSION.SDK_INT < 20;
}
}
PlayTrackView的.java
public class PlayTrackView extends FrameLayout implements IItemDisplayer<Track> {
public PlayTrackView(Context context) {
super(context);
LayoutInflater.from(context).inflate(R.layout.play_track_view, this);
}
public PlayTrackView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.play_track_view, this);
}
public PlayTrackView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater.from(context).inflate(R.layout.play_track_view, this);
}
@Override
public void displayItem(Track track) {
}
}
軌道的.java
public class Track {
public String trackId;
public String trackName;
}
IItemDisplayer接口
public interface IItemDisplayer<TItem> {
public void displayItem(TItem item);
}
BaseListViewAdapter
看到這個項目:https://github.com/terlici/DragNDropList – 2015-02-24 11:36:49
@ y.feizi:這是庫項目,給我鏈接演示使用這個庫 – Jayesh 2015-02-24 11:46:59