Они распространяют свое программное обеспечение под лицензией . Закон защищает их права и не позволяет своим клиентам перераспределять источник, хотя нет реальной проблемы с этим.
Но, как вы, возможно, хорошо знаете, нарушение авторских прав (пиратство) программных продуктов является довольно распространенное явление .
Никогда не помещайте ListView
в ScrollView
. ListView
сама прокручиваемая.
По умолчанию ListView прокручивается. Не помещайте ScrollView в ListView
Практически это нехорошо. Но если вы хотите сделать это, просто установите высоту списка в wrap_content.
android:layout_height="wrap_content"
Вы не должны помещать ListView в ScrollView, потому что класс ListView реализует собственную прокрутку, и он просто не получает жесты, потому что все они обрабатываются родительским ScrollView
Listview, поэтому есть встроенные возможности прокрутки. Таким образом, вы не можете использовать просмотр списка внутри scrollview. Инкапсулируйте его в любой другой макет, например LinearLayout или RelativeLayout.
Это мой рабочий код. Вы можете попробовать это.
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));
Помещение ListView
в ScrollView
никогда не вдохновляет. Но если вы хотите, чтобы ваше опубликованное поведение было похоже на XML, у меня есть 3 варианта:
Удалить ScrollView
: удаляя ScrollView
, вы можете дать ListView
с некоторый конкретный размер по отношению к общему макету (либо конкретный dp
или layout_weight
).
Заменить ListView
s на LinearLayout
s: Вы можете добавить элементы списка, просматривая список элементов, и добавлять каждое представление элемента к соответствующему LinearLayout
, надувая представление & amp; установка соответствующих данных (строка, изображение и т. д.)
Если вам действительно нужно поместить ListView
в ScrollView
, вы должны сделать ваши ListView
не с возможностью прокрутки (что практически совпадает с решением 2 выше, но с кодами ListView
), иначе макет не будет работать так, как вы ожидаете.
Чтобы сделать ListView
не подлежащим прокрутке, вы можете прочитать этот пост SO , где точное решение для меня похоже на приведенное ниже:
listView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return (event.getAction() == MotionEvent.ACTION_MOVE);
}
});
Я знаю, что этому вопросу 4-5 лет, но, тем не менее, это может быть полезно:
Иногда, если у вас есть только несколько элементов, которые «выходят из экрана», список может не прокручиваться. Это связано с тем, что операционная система не рассматривает его как превышающий экран.
Я говорю это, потому что столкнулся с этой проблемой сегодня - у меня было только 2 или 3 элемента, которые выходили за пределы экрана, и мой список нельзя было прокручивать. И это было настоящей загадкой. Как только я добавил еще несколько, он начал прокручиваться.
Таким образом, вы должны сначала убедиться, что это не проблема дизайна, как список, выходящий за границы экрана, но на самом деле «нет», и отрегулировать его размеры и значения полей и посмотреть, это начинает "становиться прокручиваемым". Это для меня.
Я нашел хитрое решение ... которое работает только в 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" />