Как сделать Android ListView прокручиваемым?

Они распространяют свое программное обеспечение под лицензией . Закон защищает их права и не позволяет своим клиентам перераспределять источник, хотя нет реальной проблемы с этим.

Но, как вы, возможно, хорошо знаете, нарушение авторских прав (пиратство) программных продуктов является довольно распространенное явление .

23
задан Riyaz Mohammed Ibrahim 3 December 2012 в 08:59
поделиться

9 ответов

Никогда не помещайте ListView в ScrollView. ListView сама прокручиваемая.

70
ответ дан Pandaiolo 3 December 2012 в 08:59
поделиться

По умолчанию ListView прокручивается. Не помещайте ScrollView в ListView

11
ответ дан Prasanna 3 December 2012 в 08:59
поделиться

Практически это нехорошо. Но если вы хотите сделать это, просто установите высоту списка в wrap_content.

android:layout_height="wrap_content"
6
ответ дан Dhrupal 3 December 2012 в 08:59
поделиться

Вы не должны помещать ListView в ScrollView, потому что класс ListView реализует собственную прокрутку, и он просто не получает жесты, потому что все они обрабатываются родительским ScrollView

4
ответ дан Ram kiran 3 December 2012 в 08:59
поделиться

Listview, поэтому есть встроенные возможности прокрутки. Таким образом, вы не можете использовать просмотр списка внутри scrollview. Инкапсулируйте его в любой другой макет, например LinearLayout или RelativeLayout.

3
ответ дан Yashdeep Patel 3 December 2012 в 08:59
поделиться

Это мой рабочий код. Вы можете попробовать это.

row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/listEmployeeDetails"
        android:layout_height="match_parent" 
        android:layout_width="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_gravity="center"
        android:background="#ffffff">

        <TextView android:id="@+id/tvEmpId"
                      android:layout_height="wrap_content"
                      android:textSize="12sp"
                      android:padding="2dp"
                      android:layout_width="0dp"
                      android:layout_weight="0.3"/>
            <TextView android:id="@+id/tvNameEmp"
                      android:layout_height="wrap_content"
                      android:textSize="12sp"                     
                      android:padding="2dp"
                      android:layout_width="0dp"
                      android:layout_weight="0.5"/>
             <TextView
                    android:layout_height="wrap_content"
                    android:id="@+id/tvStatusEmp"
                    android:textSize="12sp"
                    android:padding="2dp"
                    android:layout_width="0dp"
                    android:layout_weight="0.2"/>               
</LinearLayout> 

details.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listEmployeeDetails"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/page_bg"
    android:orientation="vertical" >
    <LinearLayout
        android:id="@+id/lLayoutGrid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/page_bg"
        android:orientation="vertical" >

        ................... others components here............................

        <ListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alwaysDrawnWithCache="true"
            android:dividerHeight="1dp"
            android:horizontalSpacing="3dp"
            android:scrollingCache="true"
            android:smoothScrollbar="true"
            android:stretchMode="columnWidth"
            android:verticalSpacing="3dp" 
            android:layout_marginBottom="30dp">
        </ListView>
    </LinearLayout>
</RelativeLayout>

Класс адаптера:

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class ListViewAdapter extends BaseAdapter {
    private Context context;
    private List<EmployeeBean> employeeList; 

    publicListViewAdapter(Context context, List<EmployeeBean> employeeList) {
            this.context = context;
            this.employeeList = employeeList;
        }

    public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;
            EmployeeBeanHolder holder = null;
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.row, parent, false);

            holder = new EmployeeBeanHolder();
            holder.employeeBean = employeeList.get(position);
            holder.tvEmpId = (TextView) row.findViewById(R.id.tvEmpId);
            holder.tvName = (TextView) row.findViewById(R.id.tvNameEmp);
            holder.tvStatus = (TextView) row.findViewById(R.id.tvStatusEmp);

            row.setTag(holder);
            holder.tvEmpId.setText(holder.employeeBean.getEmpId());
            holder.tvName.setText(holder.employeeBean.getName());
            holder.tvStatus.setText(holder.employeeBean.getStatus());

             if (position % 2 == 0) {
                    row.setBackgroundColor(Color.rgb(213, 229, 241));
                } else {                    
                    row.setBackgroundColor(Color.rgb(255, 255, 255));
                }        

            return row;
        }

   public static class EmployeeBeanHolder {
        EmployeeBean employeeBean;
        TextView tvEmpId;
        TextView tvName;
        TextView tvStatus;
    }

    @Override
    public int getCount() {
            return employeeList.size();
        }

    @Override
    public Object getItem(int position) {
            return null;
        }

    @Override
    public long getItemId(int position) {
            return 0;
    }
}

класс бина сотрудника:

public class EmployeeBean {
    private String empId;
    private String name;
    private String status;

    public EmployeeBean(){      
    }

    public EmployeeBean(String empId, String name, String status) {
        this.empId= empId;
        this.name = name;
        this.status = status;
    }

    public String getEmpId() {
        return empId;
    }

    public void setEmpId(String empId) {
        this.empId= empId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status =status;
    }
}

в классе Activity:

, метод onCreate:

public static List<EmployeeBean> EMPLOYEE_LIST = new ArrayList<EmployeeBean>();

//create emplyee data
for(int i=0;i<=10;i++) {
  EmployeeBean emplyee = new EmployeeBean("EmpId"+i,"Name "+i, "Active");
  EMPLOYEE_LIST .add(emplyee );
}

ListView listView;
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new ListViewAdapter(this, EMPLOYEE_LIST));
3
ответ дан Md. Kamruzzaman 3 December 2012 в 08:59
поделиться

Помещение ListView в ScrollView никогда не вдохновляет. Но если вы хотите, чтобы ваше опубликованное поведение было похоже на XML, у меня есть 3 варианта:

  1. Удалить ScrollView: удаляя ScrollView, вы можете дать ListView с некоторый конкретный размер по отношению к общему макету (либо конкретный dp или layout_weight).

  2. Заменить ListView s на LinearLayout s: Вы можете добавить элементы списка, просматривая список элементов, и добавлять каждое представление элемента к соответствующему LinearLayout, надувая представление & amp; установка соответствующих данных (строка, изображение и т. д.)

  3. Если вам действительно нужно поместить ListView в ScrollView, вы должны сделать ваши ListView не с возможностью прокрутки (что практически совпадает с решением 2 выше, но с кодами ListView), иначе макет не будет работать так, как вы ожидаете.
    Чтобы сделать ListView не подлежащим прокрутке, вы можете прочитать этот пост SO , где точное решение для меня похоже на приведенное ниже:

listView.setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View v, MotionEvent event) {
    return (event.getAction() == MotionEvent.ACTION_MOVE);
  }
});
2
ответ дан Community 3 December 2012 в 08:59
поделиться

Я знаю, что этому вопросу 4-5 лет, но, тем не менее, это может быть полезно:

Иногда, если у вас есть только несколько элементов, которые «выходят из экрана», список может не прокручиваться. Это связано с тем, что операционная система не рассматривает его как превышающий экран.

Я говорю это, потому что столкнулся с этой проблемой сегодня - у меня было только 2 или 3 элемента, которые выходили за пределы экрана, и мой список нельзя было прокручивать. И это было настоящей загадкой. Как только я добавил еще несколько, он начал прокручиваться.

Таким образом, вы должны сначала убедиться, что это не проблема дизайна, как список, выходящий за границы экрана, но на самом деле «нет», и отрегулировать его размеры и значения полей и посмотреть, это начинает "становиться прокручиваемым". Это для меня.

1
ответ дан Robert Ruxandrescu 3 December 2012 в 08:59
поделиться

Я нашел хитрое решение ... которое работает только в RelativeLayout. Нам нужно только поместить View над ListView и установить для просмотра интерактивный «true» и false для ListView

 <ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listview
    android:clickable="false" />

<View
    android:layout_width="match_parent"
    android:background="@drawable/gradient_white"
    android:layout_height="match_parent"
    android:clickable="true"
    android:layout_centerHorizontal="true"
    android:layout_alignTop="@+id/listview" />
0
ответ дан Tropp 3 December 2012 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: