Ich habe einige Inhalte gefolgt von Expandable listview.Ich kann nicht das gesamte Layout scrollen. Ich habe mehr als eine Woche nach der passenden Antwort gesucht. Versuchen Sie einige Antworten.Erweiterbare Listenansicht innerhalb von scrollview
Antwort
Erstens nehme ich an, dass Sie nicht mehr als ein Kindlayout in einer Bildlaufansicht verwenden, da eine Bildlaufansicht nur ein direktes Kind haben kann.
Zweitens sollten Sie keine Scroll-Komponente wie erweiterbare Liste verwenden, in einer Bildlaufansicht hier ist, warum ListView inside ScrollView is not scrolling on Android.
Für Anwender, die sich für expandierbares Listenansicht in Scrollview suchen, verwenden Ansichten statt erweiterbaren Liste folgen den unten stehenden Link & Code-
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/linear_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
Und In Java Class soetwas wie this-
for (int i = 0; i < pProductArrayList.size(); i++) {
LayoutInflater inflater = null;
inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View mLinearView = inflater.inflate(R.layout.row_first, null);
final TextView mProductName = (TextView) mLinearView.findViewById(R.id.textViewName);
final RelativeLayout mLinearFirstArrow=(RelativeLayout)mLinearView.findViewById(R.id.linearFirst);
final ImageView mImageArrowFirst=(ImageView)mLinearView.findViewById(R.id.imageFirstArrow);
final LinearLayout mLinearScrollSecond=(LinearLayout)mLinearView.findViewById(R.id.linear_scroll);
if(isFirstViewClick==false){
mLinearScrollSecond.setVisibility(View.GONE);
mImageArrowFirst.setBackgroundResource(R.drawable.arw_lt);
}
else{
mLinearScrollSecond.setVisibility(View.VISIBLE);
mImageArrowFirst.setBackgroundResource(R.drawable.arw_down);
}
mLinearFirstArrow.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(isFirstViewClick==false){
isFirstViewClick=true;
mImageArrowFirst.setBackgroundResource(R.drawable.arw_down);
mLinearScrollSecond.setVisibility(View.VISIBLE);
}else{
isFirstViewClick=false;
mImageArrowFirst.setBackgroundResource(R.drawable.arw_lt);
mLinearScrollSecond.setVisibility(View.GONE);
}
return false;
}
});
Diese Methode funktioniert nur, wenn Sie unter 100 Elemente haben, weil auf mehr wird die Anwendung freez bis das Aufblasen für alle Elemente erfolgt ist –
können Sie dies sehr einfach tun. Legen Sie die Höhe der Bildlaufansicht auf wrap_content fest. Legen Sie die Höhe der Stammansicht in der Bildlaufansicht als wrap_content fest (z. B. als lineares Layout), und legen Sie die erweiterbare Listenansicht auf wrap_content fest. Danach setzen Sie OnGroupExpandListener und OnGroupCollapseListener für Ihre erweiterbare Listenansicht und legen Sie die Höhe für diese fest, solange die untergeordnete Listenansicht angezeigt wird. wie dieser Code: Ihr Layout:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollViewDrawer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/mainGray"
>
<ExpandableListView
android:id="@+id/expandableListCategory"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</ScrollView>
und das ist Ihr Fragment: (oder in Ihrer Tätigkeit)
public class DrawerFragment extends Fragment implements, OnGroupExpandListener, OnGroupCollapseListener{
ScrollView scrollView;
ExpandableListView expListView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view rootView = inflater.inflate(R.layout.fragment_layout, container, false);
scrollView = (ScrollView) rootView.findViewById(R.id.scrollViewDrawer);
expListView = (ExpandableListView) rootView.findViewById(R.id.expandableListCategory);
....
}
@Override
public void onGroupExpand(int groupPosition) {
LinearLayout.LayoutParams param = (LinearLayout.LayoutParams) expListView.getLayoutParams();
param.height = (childCount * expListView.getHeight());
expListView.setLayoutParams(param);
expListView.refreshDrawableState();
scrollView.refreshDrawableState();
}
@Override
public void onGroupCollapse(int groupPosition) {
LinearLayout.LayoutParams param = (LinearLayout.LayoutParams) expListView.getLayoutParams();
param.height = LinearLayout.LayoutParams.WRAP_CONTENT;
expListView.setLayoutParams(param);
expListView.refreshDrawableState();
scrollView.refreshDrawableState();
}
Bei der Berechnung von param.height in onGroupExpand, musste ich 1 zur Anzahl der Kinder hinzufügen, um die Tatsache zu berücksichtigen, dass, wenn erweitert, die Höhe ist die Kopfzeile plus die Kinder. (Dies setzt voraus, dass die Kopfzeilenlayouthöhe und die Höhe der untergeordneten Kopfzeile dieselbe Größe haben.) – k2col
Funktioniert, aber ExpandableListView ist leer ... –
Diese Lösung funktionierte für mich, wenn ich benutzerdefiniertes Layout innerhalb Navigationsansicht mit Scroll verwendet Ansicht mit LinearLayout, die eine erweiterbare Listenansicht hat.
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header">
<ScrollView
android:fillViewport="true"
android:layout_marginTop="130dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/homeLayout"
android:clickable="true"
android:gravity="center_vertical"
android:background="@drawable/layout_click_effect"
android:layout_width="match_parent"
android:layout_height="45dp">
<ImageView
android:id="@+id/homeIv"
android:layout_width="45dp"
android:layout_height="wrap_content"
android:src="@mipmap/ic_home_black_24dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home" />
</LinearLayout>
<View
android:background="@android:color/darker_gray"
android:layout_width="match_parent"
android:layout_height="1dp"/>
<ExpandableListView
android:id="@+id/topCatgExpLv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:groupIndicator="@null"
android:dividerHeight="1dp" />
</ScrollView>
</android.support.design.widget.NavigationView>
In Ihrem onCreate
mListView = (ExpandableListView) findViewById(R.id.activity_expandable_list_view);
MyExpandableListAdapter adapter = new MyExpandableListAdapter(this,
mGroups);
mListView.setAdapter(adapter);
mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
setListViewHeight(parent, groupPosition);
return false;
}
});
private void setListViewHeight(ExpandableListView listView,
int group) {
ExpandableListAdapter listAdapter = (ExpandableListAdapter) listView.getExpandableListAdapter();
int totalHeight = 0;
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
View.MeasureSpec.EXACTLY);
for (int i = 0; i < listAdapter.getGroupCount(); i++) {
View groupItem = listAdapter.getGroupView(i, false, null, listView);
groupItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
totalHeight += groupItem.getMeasuredHeight();
if (((listView.isGroupExpanded(i)) && (i != group))
|| ((!listView.isGroupExpanded(i)) && (i == group))) {
for (int j = 0; j < listAdapter.getChildrenCount(i); j++) {
View listItem = listAdapter.getChildView(i, j, false, null,
listView);
listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
}
}
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
int height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
if (height < 10)
height = 200;
params.height = height;
listView.setLayoutParams(params);
listView.requestLayout();
}
Arbeitete für mich. Danke –
arbeitete wie ein Charme. Danke viel @amit –
aber es funktioniert nur, wenn ich den groupitem der ausdehnbaren listview.when ich scrolle die Ansicht sein, die nicht funktioniert –
Ich weiß, die Frage ist ziemlich alt, aber sein kann es für jemanden nützlich sein wird. Grundsätzlich ist meine Antwort eine Kombination aus den Antworten von Amit Tumkur und user2141833. Nach einer Menge von Versuch und Irrtum, wird der folgende Code für mich arbeiten:
zuerst die Anfangshöhe der erweiterbaren Listenansicht dh die Berechnung, wenn die ganze Sache
for (Integer i = 0; i < mAdapter.getGroupCount(); i++) {
View groupItem = mAdapter.getGroupView(i, false, null, mExpandableListView);
groupItem.measure(mExpandableListView.getWidth(), View.MeasureSpec.UNSPECIFIED);
mInitialHeight += groupItem.getMeasuredHeight();
}
Dann kollabiert ist, wenn die Gruppe angeklickt wird Inhalt
mExpandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
//Other Expansion/Collapsing Logic
setListHeightToWrap();
return true;
}
});
setListHeightToWrap Wickeln Sie die Höhe der erweiterbaren Liste gesetzt, ist eine andere Methode:
private void setListHeightToWrap() {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mExpandableListView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
mExpandableListView.setLayoutParams(params);
mExpandableListView.refreshDrawableState();
mScrollView.refreshDrawableState();
}
Dann in OnGroupExpandListener stellen Sie die Höhe der erweiterbare Liste Darstellung als:
mExpandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
@Override
public void onGroupExpand(int groupPosition) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mStitchingWorksListView.getLayoutParams();
//The Logic here will change as per your requirements and the height of each of the children in the group
if (mAdapter.getRealChildrenCount(groupPosition) > 6) {
params.height = 9 * mInitialHeight;
} else {
params.height = 6 * mInitialHeight;
}
//For Last Group in the list and the number of children were less as compared to other groups
if (groupPosition == mAdapter.getGroupCount() - 1) {
params.height = 3 * mInitialHeight;
}
mExpandableListView.setLayoutParams(params);
mExpandableListView.refreshDrawableState();
mExpandableListView.refreshDrawableState();
}
});
Auch das Layout ExpandableListView innen Linearlayout innerhalb Scroll war.
Ich hoffe, das hilft jemandem. :)
den Code unten adapteSet Geben Sie
enter code hereListAdapter listAdapter = listView.getAdapter();
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);
listView.requestLayout();
- 1. Erweiterbare Listenansicht ohne Kinder
- 2. Erweiterbare Listenansicht mit Schleife
- 3. Erweiterbare Listenansicht OnClickListeners
- 4. Erweiterbare Listenansicht setOnChildClickListener funktioniert nicht
- 5. Erweiterbare Listenansicht In Xamarin IOS
- 6. Erweiterbare ListView innerhalb Scroll View
- 7. So aktualisieren Sie erweiterbare Listenansicht Werte
- 8. Layout nicht unter Listview innerhalb von ScrollView
- 9. ScrollView innerhalb ScrollView funktioniert nicht
- 10. Erweiterbare Listenansicht - Abstand zwischen Kind- und Gruppenansichten
- 11. Erweiterbare Listenansicht Immer nach unten blättern Ausgabe
- 12. pushViewController: animiert: innerhalb von ScrollView
- 13. RecyclerView innerhalb ScrollView - ScrollView funktioniert nicht
- 14. Android: HorizontalScrollView innerhalb ScrollView
- 15. Innerhalb von ScrollView anzeigen nicht alle Platz
- 16. React-native: Scrollview innerhalb von panResponder
- 17. erweiterbare Listenansicht gibt falsche Gruppenposition, funktioniert nur korrekt ohne Ansichtshalter
- 18. Set Daten in erweiterbare Listenansicht android Form JSON-Format
- 19. ScrollView innerhalb RelativeLayout funktioniert nicht
- 20. Wie scrollt man die äußere scrollView nicht innerhalb scrollView?
- 21. Aktualisieren Listenansicht programmatisch innerhalb Adapter
- 22. Scroll-Richtung in der reaktiven nativen Listenansicht/Scrollview herausfinden
- 23. Videogalerie mit erweiterbaren Listenansicht übergeordneten horizontalen scrollview Kind
- 24. Android ScrollView nicht srcoll innerhalb LinearLayout
- 25. Wie erweiterbar Listenansicht und lineares Layout innerhalb Scroll
- 26. Scrollview scrollt nicht in einer benutzerdefinierten Ansicht für einen Listenansicht
- 27. Wie erstelle ich eine horizontale Listenansicht innerhalb einer vertikalen Listenansicht?
- 28. Verwenden RelativeLayout innerhalb ScrollView nicht in Scrollen
- 29. Scrollen eines ScrollView innerhalb eines textView-Delegaten
- 30. Pull zum Aktualisieren innerhalb einer Scrollview
wenn Sie Ihr Layout blättern wollen, dann können Sie Bildlaufleiste in Sie Layout. – Himani
https://stackoverflow.com/questions/29943600/how-can-i-put-a-expandablistlistview-into-a-scrollview-without-it-collapsing/46660821#46660821 –
Ich habe das gleiche Problem zu lösen> https://stackoverflow.com/questions/29943600/how-can-i-put-a-expandablistlistview-into-a-scrollview-without-it-collapsing/46660821#46660821 –