【发布时间】:2017-03-21 09:26:51
【问题描述】:
在我的应用程序中,我想拖动列表项。在我的列表项中,我有文本视图和图像。所以为此我遵循了以下网址
https://github.com/woxblom/DragListView
通过使用此示例,我更改了文本视图和图像视图,然后显示了我的数据。并且拖放也可以正常工作。但问题是形象不会改变。但是图像随着文本移动。所以我的观点是在删除项目文本更改后图像不会更改。那么如何改变图像呢。
这是我的活动:
public class MainActivity extends AppCompatActivity {
private DragListView mDragListView;
private ArrayList<Pair<Long, String>> mItemArray;
private ArrayList arrayList_data = new ArrayList();
private ArrayList arrayList_images = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
arrayList_data.add("Dashboard");
arrayList_data.add("Evaluations");
arrayList_data.add("Inventory");
arrayList_data.add("Buy Leads");
arrayList_data.add("Insurance");
arrayList_data.add("Cartrade Price");
arrayList_data.add("RTO Check");
arrayList_data.add("Market Place");
arrayList_data.add("Auctions");
arrayList_data.add("Integrator Report");
arrayList_data.add("What's New");
arrayList_images.add(R.mipmap.menu_dashboard);
arrayList_images.add(R.mipmap.menu_evaluations);
arrayList_images.add(R.mipmap.menu_inventory);
arrayList_images.add(R.mipmap.menu_buyleads);
arrayList_images.add(R.mipmap.menu_insurance);
arrayList_images.add(R.mipmap.menu_cartradeprice);
arrayList_images.add(R.mipmap.menu_rtocheck);
arrayList_images.add(R.mipmap.menu_marketplace);
arrayList_images.add(R.mipmap.menu_acuttions);
arrayList_images.add(R.mipmap.menu_integrator);
arrayList_images.add(R.mipmap.whatsnew);
mDragListView = (DragListView) findViewById(R.id.drag_list_view);
mDragListView.setDragListListener(new DragListView.DragListListenerAdapter() {
@Override
public void onItemDragStarted(int position) {
// mRefreshLayout.setEnabled(false);
Toast.makeText(mDragListView.getContext(), "Start - position: " + position, Toast.LENGTH_SHORT).show();
}
@Override
public void onItemDragEnded(int fromPosition, int toPosition) {
// mRefreshLayout.setEnabled(true);
if (fromPosition != toPosition) {
Toast.makeText(mDragListView.getContext(), "End - position: " + toPosition, Toast.LENGTH_SHORT).show();
}
}
});
mItemArray = new ArrayList<>();
for (int i = 0; i < arrayList_data.size(); i++) {
mItemArray.add(new Pair<>((long) i, arrayList_data.get(i).toString()));
}
// setupListRecyclerView();
setupGridVerticalRecyclerView();
}
private void setupListRecyclerView() {
mDragListView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
ItemAdapter listAdapter = new ItemAdapter(mItemArray, arrayList_images, R.layout.list_item, R.id.image, false);
mDragListView.setAdapter(listAdapter, true);
mDragListView.setCanDragHorizontally(false);
mDragListView.setCustomDragItem(new MyDragItem(MainActivity.this, R.layout.list_item));
}
private void setupGridVerticalRecyclerView() {
mDragListView.setLayoutManager(new GridLayoutManager(MainActivity.this, 3));
ItemAdapter listAdapter = new ItemAdapter(mItemArray, arrayList_images, R.layout.grid_item, R.id.item_layout, true);
mDragListView.setAdapter(listAdapter, true);
mDragListView.setCanDragHorizontally(true);
mDragListView.setCustomDragItem(null);
}
private static class MyDragItem extends DragItem {
MyDragItem(Context context, int layoutId) {
super(context, layoutId);
}
@Override
public void onBindDragView(View clickedView, View dragView) {
CharSequence text = ((TextView) clickedView.findViewById(R.id.text)).getText();
((TextView) dragView.findViewById(R.id.text)).setText(text);
ImageView image = ((ImageView) clickedView.findViewById(R.id.image));
((ImageView) dragView.findViewById(R.id.image)).setImageDrawable(image.getDrawable());
dragView.findViewById(R.id.item_layout).setBackgroundColor(dragView.getResources().getColor(R.color.list_item_background));
}
}
}
这是适配器类
class ItemAdapter extends DragItemAdapter<Pair<Long, String>, ItemAdapter.ViewHolder> {
private int mLayoutId;
private int mGrabHandleId;
private boolean mDragOnLongPress;
ArrayList<Integer> arl_images;
ItemAdapter(ArrayList<Pair<Long, String>> list, ArrayList<Integer> arl_images, int layoutId, int grabHandleId, boolean dragOnLongPress) {
mLayoutId = layoutId;
mGrabHandleId = grabHandleId;
mDragOnLongPress = dragOnLongPress;
setHasStableIds(true);
setItemList(list,arl_images);
this.arl_images = arl_images;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(mLayoutId, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
String text = mItemList.get(position).second;
holder.mText.setText(text);
holder.image.setImageResource(arl_images.get(position));
holder.itemView.setTag(mItemList.get(position));
}
@Override
public long getItemId(int position) {
return mItemList.get(position).first;
}
class ViewHolder extends DragItemAdapter.ViewHolder {
TextView mText;
ImageView image;
ViewHolder(final View itemView) {
super(itemView, mGrabHandleId, mDragOnLongPress);
mText = (TextView) itemView.findViewById(R.id.text);
image = (ImageView) itemView.findViewById(R.id.image);
}
@Override
public void onItemClicked(View view) {
Toast.makeText(view.getContext(), "Item clicked", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onItemLongClicked(View view) {
Toast.makeText(view.getContext(), "Item long clicked", Toast.LENGTH_SHORT).show();
return true;
}
}
}
【问题讨论】:
标签: android listview gridview drag-and-drop