WebView в RecyclerView показать ложные данные - PullRequest
0 голосов
/ 27 мая 2019

Я использовал WebView для загрузки данных html для каждого элемента RecyclerView. У меня проблемы, когда сделал это:

  1. Некоторое время WebView отображает данные о сбое. Когда я прокручиваю RecyclerView, какой-то элемент покажет данные другого элемента. [Решено]

  2. Высота веб-просмотра не удалась. Один предмет будет содержать высоту другого предмета в RecyclerVew.

Как я могу их исправить? Вот мой адаптер:

class ParentAdapter extends RecyclerView.Adapter<ParentAdapter.MyViewHolder> {
    private String[] urlList;
    public ParentAdapter(String[] urlList) {
        this.urlList = urlList;
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.row_my_web, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final @NonNull MyViewHolder holder, int position) {
        holder.myWebView.loadData(content + styleWebView, "text/html", "UTF-8");
    }

    @Override
    public int getItemCount() {
        return urlList.length;
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        WebView myWebView;
        TextView tv;

        MyViewHolder(View itemView) {
            super(itemView);
            myWebView = itemView.findViewById(R.id.myWebView);
            WebSettings webSettings = myWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
            webSettings.setAppCacheEnabled(false);
            myWebView.setWebChromeClient(new WebChromeClient());
            myWebView.addJavascriptInterface(new WebAppInterface(myWebView.getContext()), "Android");
            myWebView.setWebViewClient(new WebViewClient());
        }
    }

    class WebAppInterface {
        Context mContext;

        WebAppInterface1(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void clickMention(String idMention) {
            Toast.makeText(mContext, idMention, Toast.LENGTH_SHORT).show();
        }

        @JavascriptInterface
        public void clickPhone(String phone) {
            Toast.makeText(mContext, phone, Toast.LENGTH_SHORT).show();
        }

        @JavascriptInterface
        public void clickEmail(String phone) {
            Toast.makeText(mContext, phone, Toast.LENGTH_SHORT).show();
        }
    }
Мой row_my_web.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#888585"
    android:orientation="vertical"
    android:paddingBottom="10dp">
    <WebView
        android:id="@+id/myWebView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff" />
</LinearLayout>

1 Ответ

0 голосов
/ 27 мая 2019

Ответ на свой первый вопрос:

Попробуйте это решение:

RecyclerView элементы дублируются и постоянно меняются

Может быть, это решение решит и вашу вторую проблему. Дайте мне знать, если не решены!

...