在我的应用中尝试创建新闻Feed时,我已经创建了自定义ListView适配器。我的单个ListView项目有一个ImageView,WebView和ListView。所以我在ListView中有一个ListView。问题是,当我尝试滚动内部ListView时,外部ListView正在滚动。我应该改变什么以避免这个问题?
我的自定义适配器:
public class TestCustomAdapter extends BaseAdapter {
private List<String> imageNames = null;
private List<String> descriptions = null;
private List<String> innerLVitems = null;
private LayoutInflater mInflater;
private Context context;
public FirstFragmentLVAdapter(Context context, List<String> imageNames, List<String> descriptions, List<String> innerLVitems) {
this.imageNames = imageNames;
this.descriptions = descriptions;
this.innerLVitems = innerLVitems;
this.context = context;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return innerLVitems.size();
}
public Object getItem(int position) {
List <String> returnedList = new ArrayList<>();
returnedList.add(imageNames.get(position));
returnedList.add(descriptions.get(position));
returnedList.add(innerLVitems.get(position));
return returnedList;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.firstfragment_listview_item, null);
holder = new ViewHolder();
holder.image = (ImageView) convertView.findViewById(R.id.eventImage);
holder.description = (WebView) convertView.findViewById(R.id.eventDescriptionWV);
holder.LV = (ListView) convertView.findViewById(R.id.LV);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.image.setImageResource(context.getResources().getIdentifier(imageNames.get(position), "drawable", context.getPackageName()));
String webViewText = "<html><body><p align=\"justify\">"+
descriptions.get(position)+"</p></body></html>";
holder.description.loadDataWithBaseURL(null, webViewText, "text/html", "UTF-8", null);
String [] items = innerLVitems.get(position).split("\\s*,\\s*");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, android.R.id.text1, items);
holder.LV.setAdapter(adapter);
return convertView;
}
static class ViewHolder {
ImageView image;
WebView description;
ListView LV;
}
}
我的列表视图项目:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp">
<ImageView
android:id="@+id/eventImage"
android:layout_width="wrap_content"
android:layout_height="125dp"
app:srcCompat="@drawable/autumn" />
<WebView
android:id="@+id/eventDescriptionWV"
android:layout_width="match_parent"
android:layout_height="220dp"
android:layout_below="@id/eventImage"></WebView>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/eventDescriptionWV"
android:text="Text" />
<ListView
android:divider="@null"
android:dividerHeight="0dp"
android:id="@+id/LV"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_below="@id/label" />
答案 0 :(得分:1)
要使用2个嵌套ListViews
,请使用ExpandableListView
:https://developer.android.com/reference/android/widget/ExpandableListView.html。
使用2 ListViews
Android将始终在找到的第一个上应用滚动。 ExpandableListView
组件专门用于处理列表中的子列表。
答案 1 :(得分:0)
您可能希望将RecyclerView
与NestedScrollView
一起使用,并关闭RecyclerView
的嵌套滚动功能。这样,您可以在同一方向上拥有多个可滚动项目。
答案 2 :(得分:0)
我能够为我的案子找到解决方案。我需要将此行添加到内部ListView XML:
android:nestedScrollingEnabled="true"
这仅适用于Lollipop和更高版本。