其他分享
首页 > 其他分享> > android-为什么DynamicListview的拖放功能重复工作

android-为什么DynamicListview的拖放功能重复工作

作者:互联网

到目前为止,我一直在开发一个android应用程序.我想将DynamicListview的拖放功能添加到我的ListView中.我遵循Google的tutorial并使用此教程代码.我已成功添加了此功能,但是当我触摸listview元素并将其拖动到另一行时,drap drop会重复工作,它将再次创建另一个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

解决方法:

我主要在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;
}

笔记:

>代码holder.text.setText确保即使没有移动的项目也像其他项目一样被刷新.
>为了澄清起见,如果convertView不= null,则表示该视图已回收,并已显示在当前视图中.我认为这是您的问题.
>我注意到使用setTag方法调用的代码,但我跳过了它们,因为我仍然看不到哪个代码正在引用这些标签.也许您知道得更多.

标签:listview,drag-and-drop,android
来源: https://codeday.me/bug/20191120/2042503.html