【问题标题】:ArrayList not displaying in ListViewArrayList 未在 ListView 中显示
【发布时间】:2018-07-12 02:39:42
【问题描述】:

我一直在尝试让ArrayListAdapterListView 显示 URL 历史记录,并且在打开页面时它不显示任何数据。我正在使用的代码不会导致错误,并与其他人讨论过。我们认为这不是正在使用的代码。我们认为的问题是 ListView 其自身位于布局文件夹中。通过 MainFile 访问。

我们找不到任何帮助的问题:

history.xml

<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_history_layout"
android:layout_width="275dp"
android:layout_height="500dp"
android:layout_gravity="center_horizontal|center"
android:layout_margin="10dp"
android:background="@drawable/history_layout"
android:elevation="10dp">

<android.support.constraint.ConstraintLayout
    android:id="@+id/b_Toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:layout_marginEnd="1dp"
    android:layout_marginStart="1dp"
    android:layout_marginTop="3dp"
    android:background="@drawable/history_toolbar"
    app:layout_constraintBottom_toTopOf="@+id/b_HistoryList"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="History"
        android:textColor="#000"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/imageButton2"
        app:layout_constraintStart_toEndOf="@+id/b_HistoryClose"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageButton
        android:id="@+id/b_HistoryClose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="66dp"
        android:layout_marginStart="8dp"
        android:background="@android:color/transparent"
        android:onClick="onHistoryClose"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/textView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/close" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="66dp"
        android:background="@android:color/transparent"
        android:onClick="onHistoryDelete"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/delete" />


</android.support.constraint.ConstraintLayout>

<ListView
    android:id="@+id/b_HistoryList"
    android:layout_width="270dp"
    android:layout_height="426dp"
    android:layout_marginBottom="16dp"
    android:layout_marginEnd="4dp"
    android:layout_marginStart="4dp"
    android:background="@drawable/history_listview"
    android:scrollbars="vertical"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/b_Toolbar" />
</android.support.constraint.ConstraintLayout>

ArrayAdapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public  class UrlHistoryAdapter extends BaseAdapter {

private final  Context context;

private final List<String> list = new ArrayList<>();

public UrlHistoryAdapter(Context context) {
    this.context = context;
}

public  void addItem(String item) {
    this.list.add(item);
}

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

@Override
public String getItem(int position) {
    return list.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = convertView;

    if (view == null) {
        view = LayoutInflater.from(context)
                .inflate(android.R.layout.simple_list_item_1, null, false);
    }

    TextView textView = view.findViewById(android.R.id.title);
    textView.setText(getItem(position));
    return view;
}
}

Main Actvity中使用,

UrlHistoryAdapter UrlHistoryAdapter;

onCreate之后

UrlHistoryAdapter = new UrlHistoryAdapter(this);
    b_HistoryList.setAdapter(UrlHistoryAdapter);

m_WebView.setWebViewClient(new WebViewClient(){

        String url = m_WebView.getUrl();

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            UrlHistoryAdapter.addItem(url);
            UrlHistoryAdapter.notifyDataSetChanged();

            return super.shouldOverrideUrlLoading(view, request);
        }

【问题讨论】:

  • 你在哪里有网页视图? history.xmlMainActivity 吗?
  • MainActivity 中的@EduardoHerzer

标签: java android listview arraylist


【解决方案1】:

像这样在下面的UrlHistoryAdapter 中传递您的数组列表

class MainActivity extands Activity{
       ArrayList<String> arraylilst = new ArrayList<String>();
       Oncreate(){

       arraylilst.add("testingdatas");
       UrlHistoryAdapter = new UrlHistoryAdapter(this,arraylilst);
       b_HistoryList.setAdapter(UrlHistoryAdapter);

    }

 @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            arraylist.add(view.getUrl());
            UrlHistoryAdapter.notifyDataSetChanged();

            return super.shouldOverrideUrlLoading(view, request);
        }
}

那么你必须在你的UrlHistoryAdapter类中获取Arraylist

public UrlHistoryAdapter(Context context, List<String> list) {
    this.context = context;
    this.list = list;
}

【讨论】:

  • 在 AdapterClass 中的位置。
  • 列表视图根本不可见
  • 删除这行 public void addItem(String item) { this.list.add(item); }
  • UrlHistoryAdapter.addItem(url); 本次使用实例 arraylist.add(view.getUrl());
  • @EquiWare 试试这个让我知道
【解决方案2】:

首先,应在添加所有项目的末尾设置适配器。
所以修改你的代码如下

UrlHistoryAdapter UrlHistoryAdapter = new UrlHistoryAdapter(this);

m_WebView.setWebViewClient(new WebViewClient(){

    String url = m_WebView.getUrl();

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        UrlHistoryAdapter.addItem(url);
        UrlHistoryAdapter.notifyDataSetChanged();

        return super.shouldOverrideUrlLoading(view, request);
    }  

    b_HistoryList.setAdapter(UrlHistoryAdapter);

然后替换以下行

View view = convertView;
if (view == null) {
    view = LayoutInflater.from(context)
            .inflate(android.R.layout.simple_list_item_1, null, false);

这些行

    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

    convertView = layoutInflater.inflate(R.layout.simple_list_item_1,null);

您还在名为 simple_list_item_1 的布局文件夹中创建了一个 xml 文件,其中包含至少一个带有标题 id 的 textVied。

【讨论】:

  • convertView = layoutInflater.inflate(R.layout.simple_list_item_1,null);在 .inflate 上有一个 nullPointer 以及:
  • TextView textView = view.findViewById(android.R.id.title);
  • 我认为它的 ListView 的原因是因为它在 Activity 视图 Visible 中不可见
  • 这些不会产生错误,而是列表视图不可见,我无法找出原因
  • 请在您的问题中添加您的 simple_list_item_1.xml 文件。
猜你喜欢
  • 1970-01-01
  • 2017-08-15
  • 2019-04-28
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2013-03-10
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多