У меня есть 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>




Вы можете использовать библиотеку это для синтаксического анализа XML в вашем файле POJO. разбор можно сделать в вашем Фрагмент.
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 + '\'' +
'}';
}
}
для получения дополнительной информации, пожалуйста, проверьте сообщение ниже
ВЫВОД
@Spritzig, где хранится ваш значок, означает в папке drawable
Да они там хранятся
@Spritzig но где
в папке ~ drawable hdpi ~
А знаете ли вы, что во фрагменте нужно писать код не в основном действии? Потому что мне нужен фрагмент, а не основное действие
Я изменил фрагмент вот так, но в закладке фрагмента ничего не вижу. См. Измененный код для закладки фрагмента Java.
Я скопировал ваш проект в новый проект, но он не работает?
И bookmark.xml отсутствует в ресурсах, он находится в папке xml ресурсов. а у вас код не работает?
@Spritzig вам нужно добавить папку bookmark.xml
Но знаете ли вы, что в Fragment not in Main Activity нужно писать код, и если вы можете отредактировать код, чтобы я мог лучше понять, потому что на данный момент я запутался, вы добавили код сейчас, чтобы попробовать и поймать, но где мне это реализовать? . Пожалуйста, если вы можете отредактировать весь код, чтобы он был более понятным, и пожалуйста, для фрагмента, а не для MainActivity
Спасибо, надеюсь, это сработает и если можно во фрагменте отобразить только значок и имя внизу значка
@Spritzig проверьте обновленный ответ, дайте мне знать, требуется ли помощь
Позвольте нам продолжить обсуждение в чате.
Значки не отображаются, это изображения в формате png, из-за чего проблема?
@Spritzig The icons are not shown вы получили какую-либо ошибку, извините за поздний ответ
Можете ли вы проверить мой вопрос или мы можем поговорить в комнате, потому что у меня есть вопросы по Android. stackoverflow.com/questions/54233815/…
@Spritzig да, конечно
@Spritzig может поделиться своим URL-адресом, из которого вы хотите получить значок
Этого я не знаю, потому что это зависит от пользователя, который использует, но URL-адрес, который он сохраняет в searchUrl, который объявлен как String, поэтому каждый раз он отличается
@Spritzig, я добавил решение по вашему вопросу, проверьте его
Я постараюсь воспроизвести код, потому что мне нужно вставить его в viewHolder.tvIcon или если вы можете указать мне, куда мне нужно поместить этот код.
@Spritzig, в котором вы хотите установить меню значков на вашем viewHolder.tvIcon
Да, в viewHolder.tvIcon URL-адрес поступает из SearchUrl, который является пустым, и устанавливает там URL-адрес сохраненной закладки.
@Spritzig, я обновил свой ответ, пожалуйста, проверьте, требуется ли какая-либо помощь, чем, пожалуйста, укажите в своем другом вопросе также, пожалуйста, добавьте комментарий в этот ответ (здесь имеется в виду stackoverflow.com/a/54266654/7666442)
Знаете ли вы, что значок - это изображения из drawable-hdpi и для отображения значков, а не строк.