【问题标题】:Can't scroll ListView inside ListView in Android无法在 Android 的 ListView 内滚动 ListView
【发布时间】:2017-04-11 13:30:31
【问题描述】:

尝试在我的应用中创建新闻提要时,我创建了自定义 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" />

【问题讨论】:

  • 你不能同时在一个方向滚动两个卷轴。
  • 您的布局中的滚动视图在哪里?把你的代码放在这里
  • @LuizFernandoSalvaterra 没有 ScrollView。我使用 ListView。
  • 我认为这会有所帮助 stackoverflow.com/questions/6210895/…>

标签: android listview custom-adapter


【解决方案1】:

要使用 2 个嵌套的 ListViews,您可以使用 ExpandableListView : https://developer.android.com/reference/android/widget/ExpandableListView.html

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

【讨论】:

    【解决方案2】:

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

    android:nestedScrollingEnabled="true"
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多