Как разобрать xml на класс java с помощью recycler view или в адаптере recyclerview

У меня есть XML-файл с именем Закладка, и он находится в папке xml. Я хочу проанализировать xml в режиме ресайклера, в котором я могу показать список закладок в режиме ресайклера. Закладка xml ее нет в активах, она находится в папке res, затем xml. Это мой код.

Bookmark.xml в папке xml

<Bookmarks>
    <Bookmark id = "1" icon = "google.png" name = "Google" searchUrl = "https://www.google.com" hidden = "true" />
    <Bookmark id = "2" icon = "youtube_new.png" name = "Youtube" searchUrl = "http://m.youtube.com" />
    <Bookmark id = "3" icon = "facebook.png" name = "Facebook" nativeUrl = "facebook://" searchUrl = "https://m.facebook.com" />
    <Bookmark id = "4" icon = "twitter.png" name = "Twitter" searchUrl = "https://mobile.twitte.com" />
    <Bookmark id = "5" icon = "instagram.png" name = "Instagram" nativeUrl = "instagram://" searchUrl = "https:instagram.com" />
    <Bookmark id = "6" icon = "gmail.png" name = "Gmail" nativeUrl = "googlemail://" searchUrl = "https://gmail.com" />
    <Bookmark id = "7" icon = "google_translate.png" name = "Translate" searchUrl = "https://" />

</Bookmarks>

Это java-класс для просмотра ресайклера.

 public class FragmentBookmark extends Fragment {
    ArrayList<Bookmark> arrayList = new ArrayList<>();
    XmlPullParserFactory pullParserFactory;
    RecyclerView myRecyclerView;
    MyAdapter myAdapter;

    public void onCreateView(@Nullable Bundle savedInstanceState) {
        myRecyclerView = getActivity().findViewById(R.id.myRecyclerView);
        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 1);
        myRecyclerView.setHasFixedSize(true);
        try {
            pullParserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = pullParserFactory.newPullParser();

            InputStream in_s = getActivity().getApplicationContext().getAssets().open("bookmarks.xml");
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in_s, null);

            parseXML(parser);

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < arrayList.size(); i++) {
            Log.e("OUTPUT", arrayList.get(i).toString());
        }

        myAdapter = new MyAdapter(getActivity(), arrayList);
        myRecyclerView.setAdapter(myAdapter);
    }

    private void parseXML(XmlPullParser parser) throws XmlPullParserException, IOException {
        ArrayList<Bookmark> countries = null;
        int eventType = parser.getEventType();
        Bookmark country = null;

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String name;
            name = parser.getName();
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    countries = new ArrayList();
                    break;
                case XmlPullParser.START_TAG:
                    break;

                case XmlPullParser.END_TAG:
                    if (name.equals("Bookmark")) {

                        Bookmark bookmark = new Bookmark();
                        bookmark.setName(parser.getAttributeValue(null, "name"));
                        bookmark.setIcon(parser.getAttributeValue(null, "icon"));
                        bookmark.setId(parser.getAttributeValue(null, "id"));
                        bookmark.setSearchUrl(parser.getAttributeValue(null, "searchUrl"));
                        bookmark.setNativeUrl(parser.getAttributeValue(null, "nativeUrl"));
                        arrayList.add(bookmark);
                    }
                    break;
            }
            eventType = parser.next();
        }


    }

    private void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException {
        int eventType = parser.getEventType();
        Bookmark bookmark = null;


    }
    }

Это вид ресайклера xml

<android.support.v7.widget.RecyclerView xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:id = "@+id/listRecyclerView"
    android:layout_height = "match_parent"
    android:orientation = "horizontal"
    android:layout_width = "match_parent"
    android:layout_marginBottom = "8dp"
    android:layout_marginEnd = "8dp"
    android:layout_marginStart = "8dp"
    android:layout_marginTop = "8dp"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    android:fillViewport = "false">

    </android.support.v7.widget.RecyclerView>

Это адаптер для recyclerview

public class MyAdapter extends RecyclerView.Adapter {
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.grid_item, viewGroup, false);
        return new ListViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
        ((ListViewHolder) viewHolder).bindView(i);
    }

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

    private class ListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView mItemText;
        private ImageView mItemImage;

        public ListViewHolder(View itemView) {
            super(itemView);
            mItemText = itemView.findViewById(R.id.textView);
            mItemImage =  itemView.findViewById(R.id.image_view);
            itemView.setOnClickListener(this);
        }

        public void bindView(int position) {
            mItemText.setText(OurData.title[position]);
            mItemImage.setImageResource(OurData.picture[position]);

        }

        @Override
        public void onClick(View v) {

        }
    }
}

Это java-класс, который я добавил вручную и работает в режиме ресайклера, но мне нужно, чтобы XML-файл закладки отображался в режиме ресайклера.

public class OurData {
    public static String[] title = new String[] {
            "Bing",
            "Facebook",
            "Gmail",
            "Translate",
            "Bing",
            "Facebook",
            "Gmail",
            "Translate"
    };

    public static int[] picture = new int[] {
            R.drawable.instagram,
            R.drawable.instagram,
            R.drawable.instagram,
            R.drawable.instagram,
            R.drawable.instagram,
            R.drawable.instagram,
            R.drawable.instagram,
            R.drawable.instagram

    };
}

Это xml для отображения изображения и TextView для просмотра ресайклера.

<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:layout_width = "match_parent"
    android:layout_height = "70dp"
    android:id = "@+id/recyclerView">

    <ImageView
        android:id = "@+id/image_view"
        android:layout_width = "28dp"
        android:layout_height = "27dp"
        android:layout_alignParentTop = "true"
        android:layout_marginStart = "8dp"
        android:layout_marginEnd = "8dp"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "0.129"
        app:layout_constraintStart_toStartOf = "parent"
        tools:ignore = "MissingConstraints"
        tools:layout_editor_absoluteY = "16dp" />

    <TextView
        android:id = "@+id/textView"
        android:layout_width = "80dp"
        android:layout_height = "23dp"
        android:layout_below = "@+id/image_view"
        android:layout_marginStart = "8dp"
        android:layout_marginEnd = "8dp"
        android:gravity = "center"
        android:text = "TextView"
        app:layout_constraintHorizontal_bias = "0.069"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/image_view" />

</android.support.constraint.ConstraintLayout>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
1 247
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать библиотеку это для синтаксического анализа XML в вашем файле POJO. разбор можно сделать в вашем Фрагмент.

Ответ принят как подходящий

ОБНОВЛЕНИЕ 2

FragmentBookmark

public class FragmentBookmark extends Fragment {


    public FragmentBookmark() {
        // Required empty public constructor
    }

    private Context mContext;
    ArrayList<Bookmark> arrayList = new ArrayList<>();
    XmlPullParserFactory pullParserFactory;

    RecyclerView myRecyclerView;
    DataAdapter dataAdapter;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mContext = context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View rootView = inflater.inflate(R.layout.fragment_bookmark, container, false);

        myRecyclerView = rootView.findViewById(R.id.myRecyclerView);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
        myRecyclerView.setHasFixedSize(true);

        dataAdapter = new DataAdapter(mContext, arrayList);
        myRecyclerView.setAdapter(dataAdapter);

        try {

            XmlPullParser xpp = getResources().getXml(R.xml.bookmarks);

            while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
                if (xpp.getEventType() == XmlPullParser.START_TAG) {
                    if (xpp.getName().equals("Bookmark")) {

                        Log.e("MY_VALUE", " * " + xpp.getAttributeValue(0) + " * ");
                        Log.e("MY_VALUE", " * " + xpp.getAttributeValue(1) + " * ");
                        Log.e("MY_VALUE", " * " + xpp.getAttributeValue(5) + " * ");
                        Log.e("MY_VALUE", " * " + xpp.getAttributeValue(2) + " * ");
                        Log.e("MY_VALUE", " * " + xpp.getAttributeValue(3) + " * ");
                        Log.e("MY_VALUE", " * " + xpp.getAttributeValue(4) + " * ");


                        Bookmark bookmark = new Bookmark();
                        bookmark.setName(xpp.getAttributeValue(0));

                        int drawableResourceId = this.getResources().getIdentifier(xpp.getAttributeValue(1), "drawable", mContext.getPackageName());
                        bookmark.setIcon(drawableResourceId);

                        bookmark.setId(xpp.getAttributeValue(2));

                        bookmark.setSearchUrl(xpp.getAttributeValue(3));
                        bookmark.setNativeUrl(xpp.getAttributeValue(4));
                        arrayList.add(bookmark);

                    }
                }

                xpp.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        dataAdapter.notifyDataSetChanged();
        return rootView;
    }

}

layout.fragment_bookmark

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout 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:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical">

    <android.support.v7.widget.RecyclerView
        android:id = "@+id/myRecyclerView"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content" />

</RelativeLayout>

DataAdapter

public class DataAdapter  extends RecyclerView.Adapter<DataAdapter.ViewHolder> {

    private Context context;
    ArrayList<Bookmark> arrayList = new ArrayList<>();

    public DataAdapter(Context context, ArrayList<Bookmark> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {

        View view=LayoutInflater.from(context).inflate(R.layout.custom_layout,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        holder.tvName.setText(arrayList.get(position).getName());

        holder.tvIcon.setImageResource(arrayList.get(position).getIcon());

        holder.tvId.setText(arrayList.get(position).getId());
        holder.tvSearchUrl.setText(arrayList.get(position).getSearchUrl());
        holder.tvNativeUrl.setText(arrayList.get(position).getNativeUrl());
    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView tvName,tvId,tvSearchUrl,tvNativeUrl;

        ImageView tvIcon;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            tvName=itemView.findViewById(R.id.tvName);
            tvIcon=itemView.findViewById(R.id.tvIcon);
            tvId=itemView.findViewById(R.id.tvId);
            tvSearchUrl=itemView.findViewById(R.id.tvSearchUrl);
            tvNativeUrl=itemView.findViewById(R.id.tvNativeUrl);
        }
    }
}

layout.custom_layout

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.v7.widget.CardView xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "vertical"
    app:cardCornerRadius = "15dp"
    app:cardElevation = "5dp"
    app:cardUseCompatPadding = "true">

    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:orientation = "vertical">

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "Name  : " />

            <TextView
                android:id = "@+id/tvName"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "Icon  : " />

            <ImageView
                android:id = "@+id/tvIcon"
                android:layout_width = "20dp"
                android:layout_height = "20dp"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "Id  : " />

            <TextView
                android:id = "@+id/tvId"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "SearchUrl  : " />

            <TextView
                android:id = "@+id/tvSearchUrl"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "NativeUrl  : " />

            <TextView
                android:id = "@+id/tvNativeUrl"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

    </LinearLayout>

</android.support.v7.widget.CardView>

Bookmark model class

public class Bookmark
{
    String name,id,nativeUrl,searchUrl;
    int icon;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }

    public String getNativeUrl() {
        return nativeUrl;
    }

    public void setNativeUrl(String nativeUrl) {
        this.nativeUrl = nativeUrl;
    }

    public String getSearchUrl() {
        return searchUrl;
    }

    public void setSearchUrl(String searchUrl) {
        this.searchUrl = searchUrl;
    }

    @Override
    public String toString() {
        return "Bookmark{" +
                "name='" + name + '\'' +
                ", icon='" + icon + '\'' +
                ", id='" + id + '\'' +
                ", nativeUrl='" + nativeUrl + '\'' +
                ", searchUrl='" + searchUrl + '\'' +
                '}';
    }
}

ОБНОВИТЬ

XML-ФАЙЛ

<Bookmarks>
    <Bookmark
        name = "Google"
        hidden = "true"
        icon = "google.png"
        id = "1"
        nativeUrl = ""
        searchUrl = "https://www.google.com" />
    <Bookmark
        name = "Youtube"
        hidden = ""
        icon = "youtube_new.png"
        id = "2"
        nativeUrl = ""
        searchUrl = "http://m.youtube.com" />
    <Bookmark
        name = "Facebook"
        hidden = ""
        icon = "facebook.png"
        id = "3"
        nativeUrl = "facebook://"
        searchUrl = "https://m.facebook.com" />
    <Bookmark
        name = "Twitter"
        hidden = ""
        icon = "twitter.png"
        id = "4"
        nativeUrl = ""
        searchUrl = "https://mobile.twitte.com" />
    <Bookmark
        name = "Instagram"
        hidden = ""
        icon = "instagram.png"
        id = "5"
        nativeUrl = "instagram://"
        searchUrl = "https:instagram.com" />
    <Bookmark
        name = "Gmail"
        hidden = ""
        icon = "gmail.png"
        id = "6"
        nativeUrl = "googlemail://"
        searchUrl = "https://gmail.com" />
    <Bookmark
        name = "Translate"
        hidden = ""
        icon = "google_translate.png"
        id = "7"
        nativeUrl = ""
        searchUrl = "https://" />

</Bookmarks>

Вот код для разбора XML из папки res/XML

    try {

        XmlPullParser xpp = getResources().getXml(R.xml.bookmarks);

        while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
            if (xpp.getEventType() == XmlPullParser.START_TAG) {
                if (xpp.getName().equals("Bookmark")) {

                    Log.e("MY_VALUE", " * " + xpp.getAttributeValue(0) + " * ");
                    Log.e("MY_VALUE", " * " + xpp.getAttributeValue(1) + " * ");
                    Log.e("MY_VALUE", " * " + xpp.getAttributeValue(5) + " * ");
                    Log.e("MY_VALUE", " * " + xpp.getAttributeValue(2) + " * ");
                    Log.e("MY_VALUE", " * " + xpp.getAttributeValue(3) + " * ");
                    Log.e("MY_VALUE", " * " + xpp.getAttributeValue(4) + " * ");

                    Bookmark bookmark = new Bookmark();
                    bookmark.setName(xpp.getAttributeValue(0));
                    bookmark.setIcon(xpp.getAttributeValue(1));
                    bookmark.setId(xpp.getAttributeValue(2));
                    bookmark.setSearchUrl(xpp.getAttributeValue(3));
                    bookmark.setNativeUrl(xpp.getAttributeValue(4));
                    arrayList.add(bookmark);

                }
            }

            xpp.next();
        }
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

Мы можем использовать три типа анализаторов XML для Android.

  • SAX Parsers

  • DOM Parsers

  • XMLPullParser

Вы можете использовать XmlPullParserFactory для анализа вашего xml

Попробуйте вот рабочий код

MainActivity

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    ArrayList<Bookmark> arrayList = new ArrayList<>();
    XmlPullParserFactory pullParserFactory;

    RecyclerView myRecyclerView;
    DataAdapter dataAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myRecyclerView = findViewById(R.id.myRecyclerView);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        myRecyclerView.setHasFixedSize(true);
        try {
            pullParserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = pullParserFactory.newPullParser();

            InputStream in_s = getApplicationContext().getAssets().open("bookmark.xml");
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in_s, null);

            parseXML(parser);

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < arrayList.size(); i++) {
            Log.e("OUTPUT", arrayList.get(i).toString());
        }

        dataAdapter = new DataAdapter(this, arrayList);
        myRecyclerView.setAdapter(dataAdapter);
    }

    private void parseXML(XmlPullParser parser) throws XmlPullParserException, IOException {
        ArrayList<Bookmark> countries = null;
        int eventType = parser.getEventType();
        Bookmark country = null;

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String name;
            name = parser.getName();
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    countries = new ArrayList();
                    break;
                case XmlPullParser.START_TAG:
                    break;

                case XmlPullParser.END_TAG:
                    if (name.equals("Bookmark")) {
                        Log.e("VALUE", parser.getAttributeValue(null, "name") + "");
                        Log.e("VALUE", parser.getAttributeValue(null, "icon") + "");
                        Log.e("VALUE", parser.getAttributeValue(null, "id") + "");
                        Log.e("VALUE", parser.getAttributeValue(null, "searchUrl") + "");
                        Log.e("VALUE", parser.getAttributeValue(null, "nativeUrl") + "");

                        Bookmark bookmark = new Bookmark();
                        bookmark.setName(parser.getAttributeValue(null, "name"));
                        bookmark.setIcon(parser.getAttributeValue(null, "icon"));
                        bookmark.setId(parser.getAttributeValue(null, "id"));
                        bookmark.setSearchUrl(parser.getAttributeValue(null, "searchUrl"));
                        bookmark.setNativeUrl(parser.getAttributeValue(null, "nativeUrl"));
                        arrayList.add(bookmark);
                    }
                    break;
            }
            eventType = parser.next();
        }


    }

    private void processParsing(XmlPullParser parser) throws IOException, XmlPullParserException {
        int eventType = parser.getEventType();
        Bookmark bookmark = null;


    }
}

layout.activity_main

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout 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:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:orientation = "vertical">

    <android.support.v7.widget.RecyclerView
        android:id = "@+id/myRecyclerView"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content" />

</RelativeLayout>

DataAdapter

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class DataAdapter  extends RecyclerView.Adapter<DataAdapter.ViewHolder> {

    private Context context;
    ArrayList<Bookmark> arrayList = new ArrayList<>();

    public DataAdapter(Context context, ArrayList<Bookmark> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {

        View view=LayoutInflater.from(context).inflate(R.layout.custom_layout,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

        holder.tvName.setText(arrayList.get(position).getName());
        holder.tvIcon.setText(arrayList.get(position).getIcon());
        holder.tvId.setText(arrayList.get(position).getId());
        holder.tvSearchUrl.setText(arrayList.get(position).getSearchUrl());
        holder.tvNativeUrl.setText(arrayList.get(position).getNativeUrl());
    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView tvName,tvIcon,tvId,tvSearchUrl,tvNativeUrl;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            tvName=itemView.findViewById(R.id.tvName);
            tvIcon=itemView.findViewById(R.id.tvIcon);
            tvId=itemView.findViewById(R.id.tvId);
            tvSearchUrl=itemView.findViewById(R.id.tvSearchUrl);
            tvNativeUrl=itemView.findViewById(R.id.tvNativeUrl);
        }
    }
}

layout.custom_layout

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.v7.widget.CardView xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "vertical"
    app:cardCornerRadius = "15dp"
    app:cardElevation = "5dp"
    app:cardUseCompatPadding = "true">

    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:orientation = "vertical">

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "Name  : " />

            <TextView
                android:id = "@+id/tvName"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "Icon  : " />

            <TextView
                android:id = "@+id/tvIcon"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "Id  : " />

            <TextView
                android:id = "@+id/tvId"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "SearchUrl  : " />

            <TextView
                android:id = "@+id/tvSearchUrl"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

        <LinearLayout
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:orientation = "horizontal">

            <TextView
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "NativeUrl  : " />

            <TextView
                android:id = "@+id/tvNativeUrl"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:padding = "10dp"
                android:text = "" />

        </LinearLayout>

    </LinearLayout>

</android.support.v7.widget.CardView>

Bookmark model class

public class Bookmark
{
    String name,icon,id,nativeUrl,searchUrl;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getNativeUrl() {
        return nativeUrl;
    }

    public void setNativeUrl(String nativeUrl) {
        this.nativeUrl = nativeUrl;
    }

    public String getSearchUrl() {
        return searchUrl;
    }

    public void setSearchUrl(String searchUrl) {
        this.searchUrl = searchUrl;
    }

    @Override
    public String toString() {
        return "Bookmark{" +
                "name='" + name + '\'' +
                ", icon='" + icon + '\'' +
                ", id='" + id + '\'' +
                ", nativeUrl='" + nativeUrl + '\'' +
                ", searchUrl='" + searchUrl + '\'' +
                '}';
    }
}

для получения дополнительной информации, пожалуйста, проверьте сообщение ниже

ВЫВОД

Знаете ли вы, что значок - это изображения из drawable-hdpi и для отображения значков, а не строк.

Abedin.Zhuniqi 03.12.2018 22:55

@Spritzig, где хранится ваш значок, означает в папке drawable

AskNilesh 04.12.2018 05:09

Да они там хранятся

Abedin.Zhuniqi 04.12.2018 06:50

@Spritzig но где

AskNilesh 04.12.2018 09:01

в папке ~ drawable hdpi ~

Abedin.Zhuniqi 04.12.2018 11:09

А знаете ли вы, что во фрагменте нужно писать код не в основном действии? Потому что мне нужен фрагмент, а не основное действие

Abedin.Zhuniqi 04.12.2018 11:46

Я изменил фрагмент вот так, но в закладке фрагмента ничего не вижу. См. Измененный код для закладки фрагмента Java.

Abedin.Zhuniqi 04.12.2018 12:18

Я скопировал ваш проект в новый проект, но он не работает?

Abedin.Zhuniqi 04.12.2018 14:48

И bookmark.xml отсутствует в ресурсах, он находится в папке xml ресурсов. а у вас код не работает?

Abedin.Zhuniqi 04.12.2018 17:40

@Spritzig вам нужно добавить папку bookmark.xml

AskNilesh 05.12.2018 05:05

Но знаете ли вы, что в Fragment not in Main Activity нужно писать код, и если вы можете отредактировать код, чтобы я мог лучше понять, потому что на данный момент я запутался, вы добавили код сейчас, чтобы попробовать и поймать, но где мне это реализовать? . Пожалуйста, если вы можете отредактировать весь код, чтобы он был более понятным, и пожалуйста, для фрагмента, а не для MainActivity

Abedin.Zhuniqi 05.12.2018 11:39

Спасибо, надеюсь, это сработает и если можно во фрагменте отобразить только значок и имя внизу значка

Abedin.Zhuniqi 05.12.2018 14:11

@Spritzig проверьте обновленный ответ, дайте мне знать, требуется ли помощь

AskNilesh 06.12.2018 05:15

Позвольте нам продолжить обсуждение в чате.

Abedin.Zhuniqi 06.12.2018 07:19

Значки не отображаются, это изображения в формате png, из-за чего проблема?

Abedin.Zhuniqi 06.12.2018 07:32

@Spritzig The icons are not shown вы получили какую-либо ошибку, извините за поздний ответ

AskNilesh 07.12.2018 05:00

Можете ли вы проверить мой вопрос или мы можем поговорить в комнате, потому что у меня есть вопросы по Android. stackoverflow.com/questions/54233815/…

Abedin.Zhuniqi 18.01.2019 15:41

@Spritzig да, конечно

AskNilesh 19.01.2019 05:04

@Spritzig может поделиться своим URL-адресом, из которого вы хотите получить значок

AskNilesh 19.01.2019 12:12

Этого я не знаю, потому что это зависит от пользователя, который использует, но URL-адрес, который он сохраняет в searchUrl, который объявлен как String, поэтому каждый раз он отличается

Abedin.Zhuniqi 19.01.2019 12:23

@Spritzig, я добавил решение по вашему вопросу, проверьте его

AskNilesh 19.01.2019 12:35

Я постараюсь воспроизвести код, потому что мне нужно вставить его в viewHolder.tvIcon или если вы можете указать мне, куда мне нужно поместить этот код.

Abedin.Zhuniqi 19.01.2019 12:41

@Spritzig, в котором вы хотите установить меню значков на вашем viewHolder.tvIcon

AskNilesh 19.01.2019 12:43

Да, в viewHolder.tvIcon URL-адрес поступает из SearchUrl, который является пустым, и устанавливает там URL-адрес сохраненной закладки.

Abedin.Zhuniqi 19.01.2019 12:46

@Spritzig, я обновил свой ответ, пожалуйста, проверьте, требуется ли какая-либо помощь, чем, пожалуйста, укажите в своем другом вопросе также, пожалуйста, добавьте комментарий в этот ответ (здесь имеется в виду stackoverflow.com/a/54266654/7666442)

AskNilesh 19.01.2019 12:52

Другие вопросы по теме