スクロールビューのほぼ1ページ分のスクロールの下にリストビューがありますが、リストビューに値が設定されると、スクロールビューがリストビューの一番上に移動します。これをどのように修正/防止することができますか?
スクロールビューXML:
<ScrollView
android:id="@+id/tvscrollview"
android:layout_marginTop="8.0dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include
layout="@layout/a" />
<include
layout="@layout/b" />
<include
layout="@layout/c" />
<include
layout="@layout/d" />
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
私はsv.fullScroll(ScrollView.FOCUS_UP);をやってみました 私のスクロールビューにそれらすべてのものがありますが、それは機能しません
まず、おそらくあなたはすでにそれについて聞いてきましたが、念のために:あなたは入れてはいけませんListView
内部のScrollView
ように、ListView
それ自体がすでに持っているScrollView
と、このデザインは、全体に反するListView
考え方。それを使用する必要があると確信している場合は、おそらくより優れた使用方法があり、コードを何らかの方法で単純化する必要があるかもしれません。
さて、そのようなものを使用したい場合でも、次のようなものを使用できます。
package your.package.name;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
public class ScrollingListView {
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null)
return;
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
}
アダプタを設定し.setAdapter()
、その後で呼び出しますScrollingListView.setListViewHeightBasedOnChildren(your_listview)
。これにより、ListView
高さに応じてウィンドウが再調整されます。
----編集----
それはおそらく最も醜い回避策ですが、次のことを試してください:
ScrollView sv = (ScrollView) findViewById(R.id.your_scrollview);
sv.setEnabled(false);
// Populate your ListView
sv.setEnabled(true);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加