3

Привет iam, работающий в настоящее время в приложении Android, имеет два вида списка внутри основного вида деятельности. Что я хочу, это отключить прокрутку двух списков и разрешить только прокрутку всей страницы, там любой способ для этого, пожалуйста, помогите ..... мой код package com.example.listviewdemo;DIsable прокрутка для списка и включение для всего макета

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

ListView list,list2; 
String[] name={"Happy","always","try","hard","you will","get it!","Believe","in","God","everything","will","work well!","Believe","in","God","everything","will","work well!"}; 
String[] name2={"Believe","in","God","everything","will","work well!","Believe","in","God","everything","will","work well!"}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    list = (ListView) findViewById(R.id.listview); 
    list2 = (ListView) findViewById(R.id.listview2); 
    list.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,name)); 
    list2.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,name2)); 



    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // TODO Auto-generated method stub 

      Toast.makeText(getBaseContext(), name [position],Toast.LENGTH_SHORT).show(); 
     } 
    }); 

list2.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // TODO Auto-generated method stub 

      Toast.makeText(getBaseContext(), name2 [position],Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
    } 

мой XML-код:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="${relativePackage}.${activityClass}" > 
    <TextView 
    android:id="@+id/text_id1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/str1" /> 
    <ListView 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    /> 
    <TextView 
     android:id="@+id/text_id2" 
    android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/str2" 

    /> 

     <ListView 
    android:id="@+id/listview2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
     /> 
     </LinearLayout> 

ответ

11

Вы можете попробовать это.

FOR XML PART СДЕЛАТЬ ЭТО:

Поместите ваши все данные макета под одной Scroll View, например:

<ScrollView 
     android:id="@+id/scrollViewId" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" >    

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

       <ListView 
        android:id="@+id/list" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" /> // SAY YOUR FIRST LIST VIEW: 

       <ListView 
        android:id="@+id/list" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" /> // SAY YOUR SECONDLIST VIEW: 

       // Add your other views as per requirement.... 

     </LinearLayout> 

    </ScrollView> 

ТЕПЕРЬ В JAVA CLASS необходимо сделать следующее ВЕЩЬ ...

Просто добавьте этот настраиваемый метод в свой код после установки адаптера в список:

setListViewHeightBasedOnChildren(listview) 

Пример:

 list = (ListView) findViewById(R.id.listview); 
     list.setAdapter(new ArrayAdapter<String> 
         (MainActivity.this,android.R.layout.simple_list_item_1,name)); 
     setListViewHeightBasedOnChildren(list); 

Сделайте то же самое для просмотра второго списка.

Вот тело setListViewHeightBasedOnChildren МЕТОДА

public static void setListViewHeightBasedOnChildren(ListView listView) 
{ 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) 
     return; 

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED); 
    int totalHeight=0; 
    View view = null; 

    for (int i = 0; i < listAdapter.getCount(); i++) 
    { 
     view = listAdapter.getView(i, view, listView); 

     if (i == 0) 
      view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, 
             LayoutParams.MATCH_PARENT)); 

     view.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += view.getMeasuredHeight(); 

    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + ((listView.getDividerHeight()) * (listAdapter.getCount())); 

    listView.setLayoutParams(params); 
    listView.requestLayout(); 

} 

Надеется, что это работает для вас.

+0

, но я слышал, что вы не можете положить listview внутрь прокрутки! – user3781907

+0

Обычно мы не помещаем просмотр списка внутри прокрутки, потому что в представлении списка есть свои собственные функции прокрутки по умолчанию, поэтому мы не ставим. Но не обязательно, чтобы вы этого не делали. В пользовательском интерфейсе вы можете разместить столько просмотров списков. Но вы остановите функцию прокрутки в представлении списка. –

+0

Просто попробуйте мой код. Внесите пользовательскую функцию, которую я отправил setListViewHeightBasedOnChildren(). Вы обязательно получите свой результат. Если есть какие-либо проблемы в реализации, дайте мне знать. –

0

scroolview позволяют только одного ребенка. поэтому для решения вашей проблемы вам нужно создать scrollview в xml внутри put linearLayout и внутри LinearLayout разместить весь ваш контент.

и для отключения прокрутки списка вы можете использовать внутри MainActivty: list .setVerticalScrollBarEnabled (false);

<ScrollView 
     android:id="@+id/scrollView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 
      <TextView 
       android:id="@+id/text_id1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/str1" 
       /> 
      <ListView 
       android:id="@+id/listview" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 
      </ListView> 
      <TextView 
       android:id="@+id/text_id2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/str2" /> 
      <ListView 
       android:id="@+id/listview2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 
      </ListView> 
     </LinearLayout> 
    </ScrollView> 
1

Вы не должны помещать прокруткой контейнер внутри другого скроллинг контейнера (Scrollview содержащего ListView) Даже если вам удастся заставить его работать она будет создавать проблемы.

Пожалуйста, обратите внимание на редизайн вашего макета или, например, динамически добавлять макеты для просмотра прокрутки или избавиться от просмотра прокрутки и использовать представление списка с заголовками и/или нижними колонтитулами

+0

http://www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ –