Во-первых, возможно, вы уже слышали об этом, но на всякий случай: Никогда не следует помещать 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);