有人可以解释为什么这里的第一段代码有效但不是最后一段吗?唯一的区别是我插入我的视图的索引i-1
和i+1
。 i+1
对索引是不可能的吗?我可以在那里写任何其他号码并且它有效。
upButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < drawerViewGroup3.getChildCount(); i++) {
View view = drawerViewGroup3.getChildAt(i);
TextView tv = (TextView) view.findViewById(R.id.drawer_name);
if (tv.getText().toString().equals(drawerName.getText().toString()) && i != 0) {
drawerViewGroup3.removeView(view);
drawerViewGroup3.addView(view, i - 1);
}
}
}
});
downButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < drawerViewGroup3.getChildCount(); i++) {
View view = drawerViewGroup3.getChildAt(i);
TextView tv = (TextView) view.findViewById(R.id.drawer_name);
if (tv.getText().toString().equals(drawerName.getText().toString())) {
drawerViewGroup3.removeView(view);
drawerViewGroup3.addView(view, i + 1);
}
}
}
});
应用程序的一些上下文。我有一个垂直导向的LinearLayout
,里面有多个LinearLayouts
。单击代码中的两个Button
时,其中一个孩子将向上或向下移动,切换他们的位置。
downButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View viewToMove = null;
int viewToMovePos = drawerViewGroup3.getChildCount();
for (int i = 0; i < drawerViewGroup3.getChildCount(); i++) {
View view = drawerViewGroup3.getChildAt(i);
TextView tv = (TextView) view.findViewById(R.id.drawer_name);
if (tv.getText().toString().equals(drawerName.getText().toString()) && i != drawerViewGroup3.getChildCount() - 1) {
viewToMovePos = i;
viewToMove = view;
}
}
alert.dismiss();
if (viewToMovePos != drawerViewGroup3.getChildCount()) {
drawerViewGroup3.removeView(viewToMove);
drawerViewGroup3.addView(viewToMove, viewToMovePos + 1);
}
}
});
不是最漂亮的代码,可能不会帮助别人,因为它非常具体,但这就是答案。
答案 0 :(得分:0)
从LinearLayout中删除视图时,索引i
处的视图现在是之后的视图您删除的视图。然后在i - 1
处添加一个视图,该视图位于此视图之前(之前在删除视图之后的视图)。最终结果是您删除了一个视图并将其插回原来的位置。
相反,您需要在i - 2
添加视图。
我建议您查看RecyclerView
。它专门设计用于有效地为给定数据创建动态视图列表。您只需操纵数据,RecyclerView
就可以为您完成所有艰苦的工作。