gpt4 book ai didi

java - 无法解析Xml数据到RecyclerView

转载 作者:行者123 更新时间:2023-12-02 09:54:02 24 4
gpt4 key购买 nike

我有一个 RecyclerView,它应该从 XML 文件获取数据。我创建了一种方法,该方法从包含 XML 内容的变量获取输入文件,然后循环此数据并将 XML(子节点)添加到列表(例如: ArrayList nameoftheList )。该列表在 onBind 方法中使用来显示。

我的问题是运行回收器的应用程序没有显示任何内容!下面是一些代码:

编辑:进行了建议的更改

<小时/>

适配器(编辑)

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


private String lista;
private ArrayList<Node> listaNodi;
private ArrayList<String> lista_errore;

public Adapter_recycler(String lista,RecyclerView recyclerView) {
this.lista = lista;
listaNodi = new ArrayList<>();


lista_errore = new ArrayList<>();
for (int i=0;i<=5;i++)
lista_errore.add("ERRORE");

try {
LeggiFile();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}

}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v;
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.righe_main,parent,false);
return new ViewHolder1(v);
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {


if(listaNodi.size() == 0)
{
((ViewHolder1)viewHolder).titolo1.setText(lista_errore.get(position));
}else{
((ViewHolder1)viewHolder).titolo1.setText(((Element) listaNodi.get(position)).getAttribute("name"));
}

}

@Override
public int getItemCount() {
if (listaNodi.size() == 0)
return lista_errore.size();
else
return listaNodi.size();
}
<小时/>

XML 方法(循环并添加到列表)(编辑)

private void LeggiFile() throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder DBuilder = factory.newDocumentBuilder();

Node Players = DBuilder.parse(new InputSource(new StringReader(lista)));
Node player = null;

for (int i = 0; i < Players.getChildNodes().getLength(); i++) {
if (player == null) {
player = Players.getFirstChild();
}
else
{player = player.getNextSibling() ;}
listaNodi.add(player);
}

}
<小时/>

fragment (编辑)

public class Fragment_Chat extends Fragment {

private Adapter_recycler adapter;
private RecyclerView recyclerView;
private LinearLayoutManager linearLayoutManager;
private String list = "";
Context context = getActivity();


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_fragment__chat, container,
false);


list = ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<Players>\n" +
"<player name=\"mike\">\n" +
"</player>\n" +
"<player name=\"mike\">\n" +
"</player>\n" +
"<player name=\"mike\">\n" +
"</player>\n" +
"</Players>");


recyclerView = view.findViewById(R.id.recycler);
linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
adapter = new Adapter_recycler(list,recyclerView,context);

recyclerView.setAdapter(adapter);


return view;

}

}

最佳答案

我立刻就能看到变化

@Override
public int getItemCount() {
return 0;
}

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

Adapter_recycler 构造函数未实例化字段listaNodi

如果这没有解决问题,您可以在 onBindViewHolder 中放置一个断点,并确保 listaNodi 有项目。

移动

    try {
LeggiFile();
..
..

Adapter_recycler 构造函数,否则它将在每次需要 View 时运行

DBuilder.parse可以采用String,不需要File

关于java - 无法解析Xml数据到RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56134291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com