为什么DynamicListview的拖放功能可以复制

时间:2015-05-28 08:07:30

标签: android listview drag-and-drop

到目前为止,我一直在开发Android应用程序。我想将DynamicListview的拖放功能添加到我的ListView中。我关注Google的tutorial并使用此教程代码。我成功添加了此功能,但drap drop重复工作,当我触摸listview元素并将其拖动到另一行时,它再次创建另一个listview元素。当我从listview元素释放我的手指时,它正常工作.Google的教程也正常工作它没有遇到这个问题。为了清除我的问题,我添加了两个视频。首先我的视频; drag-drop issue和工作良好google's tutorial video(正如您在视频中看到的那样,当我尝试移动区域时,区域字段在每次移动时都会重复,Google的教程效果很好)

我该如何解决这个问题。

我的代码很长,所以我在github gist上分享了;

这是我的DynamicListView类;

https://gist.github.com/salihyalcin/bd9a3c23179f44212419

这是我的NavigationDrawer类:

https://gist.github.com/salihyalcin/620467a96fdce3129d1b

最后我的NavigationDrawerListViewAdapter:

https://gist.github.com/salihyalcin/474423f5705dbe41e8d6

1 个答案:

答案 0 :(得分:3)

我主要回顾了DynamicListView和NavigationDrawerListViewAdapter类中的代码。正如我在评论中所说,我熟悉DynamicListView代码,你的代码似乎很好。

我看到的问题是你的originalItem在原始(错误)位置保持可见但在内部项目(在NavigationDrawerListViewAdapter中的ArrayList对象中)不再处于相同位置在ArrayList中。这是一个强烈的信号,表明该项目没有在正确的时间刷新。您确实在DynamicListView中调用了getAdapter()。notifyDataSetChanged(),但这仅适用于要移动的2个项目。未移动的项目(原始项目)保持在相同的错误位置,但需要刷新以更新到正确的位置。在视觉上我知道这不明显!

我怀疑NavigationDrawerListViewAdapter中的 getView 方法需要更新。方法getView负责显示Listiview中的所有项目! getView中的代码具有相当奇怪的编码技术,需要按照传统方式进行编码,正如Google developer.android.com所建议的那样。好的部分是我认为您不需要重大代码更新来解决您的问题。

代码建议:

public View getView(final int position, View convertView, final ViewGroup parent) {
    ViewHolder holder = null;

    final NavigationDrawerFragment.ListItem i = myItems.get(position);

    if (convertView == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.navigation_drawer_listview_simple, null);

        holder.text = (TextView) convertView.findViewById(R.id.textView123);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.text.setText(i.textdata);

    return convertView;
}

注意:

  1. 代码holder.text.setText确保即使是不移动的项目也会像其他项目一样刷新。
  2. 为了澄清,如果convertView不是= null,则表示视图已被回收并已显示在当前视图中。我认为这是你的问题。
  3. 我注意到使用setTag方法调用的代码,我跳过了它们,因为我还没有看到哪些代码引用了这些代码。也许你知道的更好。
相关问题