次のような XML ファイルからデータを取得しています。
<posts>
<page id="1">
<title>
<![CDATA[ Tile no. 1 ]]>
</title>
<smallimage>
http://www.xyz.com/right.jpg
</smallimage>
</page>
<page id="2">
<title>
<![CDATA[ Tile no. 2 ]]>
</title>
</page>
<page id="3">
<title>
<![CDATA[ Tile no. 3 ]]>
</title>
<smallimage>
http://www.xyz.com/left.jpg
</smallimage>
</page>
</posts>
これは、要素とを取得している XML の例です。3 か 6 か 1 かもしれません。
私のコードでは、SAX パーサーを使用してこの XML ファイルを解析しています。データを取得し、リスト ビューに表示できますが、画像を一緒に表示できます。
画像を表示するには、LazlyList Example (ImageLoader Class) を使用しています。
以下は私のコードです: -
MainActivity.java
public class MainActivity extends Activity {
/** Called when the activity is first created. */
static final String URL = "http://www.xyz.com/api.php?page_id=1";
ItemList itemList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
XMLParser parser = new XMLParser();
String XML = parser.getXmlFromUrl(URL);
System.out.println("This XML is ========>"+XML);
try
{
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
/** Create handler to handle XML Tags ( extends DefaultHandler ) */
MyXMLHandler myXMLHandler = new MyXMLHandler();
xr.setContentHandler(myXMLHandler);
ByteArrayInputStream is = new ByteArrayInputStream(XML.getBytes());
xr.parse(new InputSource(is));
}
catch(Exception e)
{
}
itemList = MyXMLHandler.itemList;
ArrayList<String> listItem= itemList.getTitle();
ArrayList<String> listManu = itemList.getSmallimages();
System.out.println("(ListItem)=======>"+listItem);
System.out.println("(ListManu)=======>"+listManu);
// String ar[];
Object obj[]=listManu.toArray();
String[] stringArray=Arrays.asList(obj).toArray(new String[obj.length]);
System.out.println("Array to String"+Arrays.toString(stringArray));
// ar=(String[]) listManu.toArray();
ListView lview = (ListView) findViewById(R.id.listview1);
myAdapter adapter = new myAdapter(this, listItem, stringArray);
lview.setAdapter(adapter);
}
myAdapter.java
public class myAdapter extends BaseAdapter
{
ArrayList<String> listTitle;
String [] data;
ImageLoader imageLoader;
Activity activity;
public myAdapter(Activity activity, ArrayList<String> listTitle, String[] d) {
super();
this.listTitle = listTitle;
this.data = d;
this.activity = activity;
this.imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
// TODO Auto-generated method stub
return data.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
private class ViewHolder
{
TextView txtViewTitle;
ImageView image;
}
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder title;
LayoutInflater inflater = activity.getLayoutInflater();
if(view==null)
{
view = inflater.inflate(R.layout.lview_row, null);
title = new ViewHolder();
title.txtViewTitle = (TextView) view.findViewById(R.id.txtItem);
title.image = (ImageView) view.findViewById(R.id.list_image);
view.setTag(title);
}
else
{
title = (ViewHolder) view.getTag();
}
title.txtViewTitle.setText(listTitle.get(position));
imageLoader.DisplayImage(data[position], title.image);
return view;
}
}
\
return data.length を使用している場合、画像とタイルのみを取得しています。文字列 [] はスペースではなく画像のみを保存しているため、の画像が存在します...
public int getCount() {
return data.length;
しかし、 data.length を listTitle.size() に変更したとき
public int getCount() {
return listTitle.size();
完全なリストを提供するため、私は listTilte.size() を使用しています...
この問題を解決し、リストビューで画像と完全なタイトルデータを取得する方法と、画像が存在する場所でタイトル付きの画像のみを取得する方法を教えてください。それ以外の場合は、タイトルのみがリストビューに表示されます...
ありがとうございます。