我正在使用THIS教程中的SwipeListView。
在本教程中,他们通过向右滑动打开一种自定义行,并通过向左滑动关闭该行。
我想使用它有点不同。
我想通过向左滑动打开1种行,向右滑动打开其他类型。
我首先尝试使用下面的代码来执行此操作,代码使用一个自定义行,如果用户向右滑动,则隐藏左侧和vise verse(这是来自主要行为):
public void onStartOpen(int position, int action, boolean right) {
Log.d("swipe", String.format("onStartOpen %d - action %d", position, action));
View v = swipelistview.getChildAt(position);
if (v == null) return;
if (right) {
v.findViewById(R.id.example_itemparameters).setVisibility(View.VISIBLE);
v.findViewById(R.id.swipe_button1).setVisibility(View.INVISIBLE);
v.findViewById(R.id.swipe_button2).setVisibility(View.INVISIBLE);
} else {
v.findViewById(R.id.example_itemparameters).setVisibility(View.INVISIBLE);
v.findViewById(R.id.swipe_button1).setVisibility(View.VISIBLE);
v.findViewById(R.id.swipe_button2).setVisibility(View.VISIBLE);
}
}
此代码的问题在于" getview"适配器只调用显示的项目,所以如果我将列表向下滚动到第一个未显示的项目," swipelistview.getChildAt(position);"是null()。
我尝试按照如何将所有项目加载到列表视图中,对我来说没有任何作用。
希望有人遇到这个问题,可以帮助我。
谢谢!
答案 0 :(得分:0)
我找到了解决这个问题的方法!!!!
感谢这位男士 - Question
这就是我的方法“onStartOpen”的样子:
@Override
public void onStartOpen(int position, int action, boolean right) {
View v = swipelistview.getChildAt(position - swipelistview.getFirstVisiblePosition());
if (v == null) return;
if (right) {
v.findViewById(R.id.example_itemparameters).setVisibility(View.VISIBLE);
v.findViewById(R.id.swipe_button1).setVisibility(View.INVISIBLE);
v.findViewById(R.id.swipe_button2).setVisibility(View.INVISIBLE);
} else {
v.findViewById(R.id.example_itemparameters).setVisibility(View.INVISIBLE);
v.findViewById(R.id.swipe_button1).setVisibility(View.VISIBLE);
v.findViewById(R.id.swipe_button2).setVisibility(View.VISIBLE);
}
}
问题是适配器的“GetView”方法只加载显示的项目,所以我的问题是在“swipelistview”更新后找到“真实”位置(通常通过向上和向下滚动列表视图)。
然后真正的位置是 - position - swipelistview.getFirstVisiblePosition()
最后,你可以用内部对象做你想做的事。
在我的情况下,如果我向左滑动,我会显示2个按钮,如果我向右滑动,我会显示textview。
希望这个答案对其他人有帮助,因为找到这个 EASY 解决方案花了我太长时间。