无法在Android中的ListView内滚动ListView

时间:2017-04-11 13:30:31

标签: android listview custom-adapter

在我的应用中尝试创建新闻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" />

3 个答案:

答案 0 :(得分:1)

要使用2个嵌套ListViews,请使用ExpandableListViewhttps://developer.android.com/reference/android/widget/ExpandableListView.html

使用2 ListViews Android将始终在找到的第一个上应用滚动。 ExpandableListView组件专门用于处理列表中的子列表。

答案 1 :(得分:0)

您可能希望将RecyclerViewNestedScrollView一起使用,并关闭RecyclerView的嵌套滚动功能。这样,您可以在同一方向上拥有多个可滚动项目。

答案 2 :(得分:0)

我能够为我的案子找到解决方案。我需要将此行添加到内部ListView XML:

android:nestedScrollingEnabled="true"

这仅适用于Lollipop和更高版本。