【发布时间】:2015-07-31 19:10:15
【问题描述】:
我创建了一个方法来循环一个包含 4 个项目的文件并生成类 obj 资源模板如下:
<?xml version="1.0" encoding="UTF-8"?>
<part1prayer>
<item>
<title> </title>
<arabictext> </arabictext>
<transliteration> </transliteration>
<tanslanguage> </tanslanguage>
<translation> </translation>
</item>
</part1prayer>
由于某种原因,此方法会四次返回最后一个 Item item[3],而不是 item[0]、item[1] 和 item[2]
但是,如果我在这一行 nNode = nList.item(temp); 手动传递值,即用 2 替换 temp,它将返回项目 2 四次。
public ArrayList<PrayerDataProperties> readAssetFile2(String fileName) {
ArrayList<PrayerDataProperties> listOfPrayers = null;
try {
listOfPrayers = new ArrayList<>();
InputStream inputstream = null;
Node nNode = null;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
inputstream = context.getAssets().open(fileName);
Document doc = dBuilder.parse(inputstream);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName(ITEM);
for (int temp = 0; temp < nList.getLength(); temp++) {
nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
PrayerDataProperties prayerData = new PrayerDataProperties();
prayerData.setArabicTxt(eElement.getElementsByTagName(ARABIC_TEXT)
.item(0).getTextContent());
prayerData.setTransliterationTxt(eElement
.getElementsByTagName(TRANSLITERATION).item(0).getTextContent());
prayerData.setTransLangTxt(eElement
.getElementsByTagName(TRANS_LANGUAGE).item(0).getTextContent());
prayerData.setTranslationTxt(eElement
.getElementsByTagName(TRANSLATION).item(0).getTextContent());
listOfPrayers.add(prayerData);
}// End if
}// End for
}// End try
catch (Exception e) {
e.printStackTrace();
}// End catch
return listOfPrayers;
}// End of readAssetFile2
public class PrayerListCustomAdapter extends BaseAdapter
{
private Context context;
private ArrayList<PrayerDataProperties> listsOfPrayer;
LayoutInflater layoutInflater;
private PrayerDataProperties prayerDataProperties;
// Empty Constructor
public PrayerListCustomAdapter()
{
}// End Empty Constructor
public PrayerListCustomAdapter(Context acontext, ArrayList<PrayerDataProperties> prayerLists)
{
this.context = acontext;
this.listsOfPrayer = prayerLists;
layoutInflater = LayoutInflater.from(acontext);
}//End of Constructor
@Override
public int getCount() {
return listsOfPrayer.size();
}
@Override
public Object getItem(int position) {
return listsOfPrayer.get(position);
}
@Override
public long getItemId(int position)
{
return listsOfPrayer.indexOf(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder = null;
View customView = convertView;
// Inflate the View if Empty
if (customView == null)
{
customView = layoutInflater.inflate(R.layout.prayer_list_template, null);
// Attach View to View inflated and ViewGroup
holder = new ViewHolder();
// Instantiate Views
holder.arabicTxt = (TextView)customView.findViewById(R.id.tv_arabic_txt);
holder.transliterationTxt = (TextView)customView.findViewById(R.id.tv_transliteration_txt);
holder.transLanguageTxt = (TextView)customView.findViewById(R.id.tv_translang_txt);
holder.translationTxt = (TextView)customView.findViewById(R.id.tv_translation_txt);
customView.setTag(holder);
}//End if
else
{
// Call The View already Inflated
holder = (ViewHolder)customView.getTag();
}//End else
// Pass Data to Each View
prayerDataProperties = (PrayerDataProperties)getItem(position);
holder.arabicTxt.setText(prayerDataProperties.getArabicTxt());
holder.transliterationTxt.setText(prayerDataProperties.getTransliterationTxt());
holder.transLanguageTxt.setText(prayerDataProperties.getTransLangTxt());
holder.translationTxt.setText(prayerDataProperties.getTranslationTxt());
return customView;
}//End of getView
static class ViewHolder
{
TextView arabicTxt, transliterationTxt, translationTxt, transLanguageTxt;
}
}// End of PrayerListCustomAdapter
【问题讨论】:
-
无意显示项目模板。
-
它添加了四次 item[3]。对不起,伙计们,我是新来的。
-
@Want2bExpert 欢迎来到 Stack Overflow!我了解您是新人,但在这里我们更喜欢人们edit 他们的问题,而不是在 cmets 中回复他们的更新和澄清。请现在就这样做。
-
@durron597 我很高兴加入专家社区以进行改进。我已按要求编辑感谢您的支持伙计们
-
有没有可能nList的长度大于4?如果是这样,您可能正在写入正确的数据,然后用最后一条数据重复写入它。确保 nList 没有会增加长度并破坏 for 循环的空节点。