我正在使用GridView创建组件以创建类似于Excel的表。在这里,我首先创建2x2网格,然后在用户单击按钮时创建2x2网格,然后添加额外的行和列。
这就是我要添加新列的步骤:-
int numColumns = GVParticipantTable.getNumColumns() + 1;
double numRows = Math.ceil((double) GVParticipantTable.getCount() / (double) GVParticipantTable.getNumColumns());
int totalItems = (int) numRows * numColumns;
if (participantDataList.size() > 4)
{
totalItems = totalItems - participantDataList.size();
}
for (int i = 0; i < totalItems; i++)
{
participantDataList.add("");
}
GVParticipantTable.setNumColumns(numColumns);
mAdapterParticipantTable.notifyDataSetChanged();
这很好用,并添加了一个额外的列。问题在于,添加列时,先前的列会缩小以容纳新列,从而使每次添加新列时这些列看起来都较小。我想一次只在屏幕上显示2列,然后让用户水平向前滚动以查看更多列。现在,网格只能垂直滚动。同样,我希望在添加新行时发生这种情况,用户应该能够垂直滚动以查看更多行。
答案 0 :(得分:0)
据我所知,您永远不应该将HorizontalScrollView与ListView一起使用,因为ListView负责其自身的滚动。最重要的是,这样做会挫败ListView处理大型列表的所有重要优化,因为它有效地迫使ListView显示其整个项目列表,以填充HorizontalScrollView提供的无限容器。
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
由于您可能被迫使用二维滚动视图,因此您可以考虑使用以下内容:blog.gorges.us/2010/06/android-two-dimensional-scrollview/
的Internet存档
我没有用过,但这可能是一个合理的方法。
也许可以尝试通过将其添加到XML文件和JAVA中
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView
android:id="@+id/scrollVertical"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
//WateverViewYouWant
</ScrollView>
</HorizontalScrollView>
以及onCreate / onCreateView上的代码
final HorizontalScrollView hScroll = (HorizontalScrollView) value.findViewById(R.id.scrollHorizontal);
final ScrollView vScroll = (ScrollView) value.findViewById(R.id.scrollVertical);
vScroll.setOnTouchListener(new View.OnTouchListener() { //inner scroll listener
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
hScroll.setOnTouchListener(new View.OnTouchListener() { //outer scroll listener
private float mx, my, curX, curY;
private boolean started = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
curX = event.getX();
curY = event.getY();
int dx = (int) (mx - curX);
int dy = (int) (my - curY);
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
if (started) {
vScroll.scrollBy(0, dy);
hScroll.scrollBy(dx, 0);
} else {
started = true;
}
mx = curX;
my = curY;
break;
case MotionEvent.ACTION_UP:
vScroll.scrollBy(0, dy);
hScroll.scrollBy(dx, 0);
started = false;
break;
}
return true;
}
});