0

私はアンドロイドに少し問題があります。xml解析を使用してデータベースから取得したアイテムのソートされたリストビューがあります。

価格でソートされたリストビューに製品を表示する必要があります

これは私のxmlフィードです:

<Feed>
<category>
<Product>
<Name>New Masters of Flash</Name>
<Price>79.99</Price>
</Product>
<Product>
<Name>Professional Java Server Programming</Name>
<Price>63.99</Price>
</Product>
<Product>
<Name>Designing Web Usability</Name>
<Price>80.00</Price>
</Product>
</category>
 </Feed>

これは私のAndroidコードです:

public class Catalogue extends Activity {

// static String URL = "https://dl.dropbox.com/u/48258247/catalogue.json";
static final String URL = "http://192.168.1.168/xcart432pro/internet.xml";

 static String KEY_CATEGORY = "Product";
 static final String KEY_TITLE = "Name";

static final String KEY_DESCRIPTION = "Description";
static final String KEY_COST = "Price"; 
static final String KEY_THUMB_URL = "Image";

ListView list;
ListAdapter adapter;

/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_CATEGORY);

        // looping through all song nodes &lt;song&gt;
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key =&gt; value

            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
           map.put(KEY_DESCRIPTION, parser.getValue(e, KEY_DESCRIPTION));
            map.put(KEY_COST, parser.getValue(e, KEY_COST));
          map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

            // adding HashList to ArrayList
            songsList.add(map);
        }

        list=(ListView)findViewById(R.id.listView1);

        // Getting adapter by passing xml data ArrayList
        adapter=new ListAdapter(this, songsList);
        list.setAdapter(adapter);
       // Bundle bundle = getIntent().getExtras();

        // KEY_CATEGORY=bundle.getString(KEY_SUBCATE); 


        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                HashMap<String, String> map = songsList.get(position);
                Intent in = new Intent(
                        Catalogue.this,
                        com.ssmobileproductions.catalogue.SingleMenuItem.class);
                in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
                in.putExtra(KEY_DESCRIPTION, map.get(KEY_DESCRIPTION));
                in.putExtra(KEY_THUMB_URL, map.get(KEY_THUMB_URL));
                in.putExtra(KEY_COST, map.get(KEY_COST));
                startActivity(in);

            }

        });

ここでは、価格でソートされたリストビューに製品を表示する必要があります。どうすればよいですか。Androidでプログラムを使用してください。

編集:私は以下のようないくつかのコードを追加しました:

Button btninsert = (Button) findViewById(R.id.sort);
   btninsert.setOnClickListener(new View.OnClickListener() {

        final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

    public void onClick(View v) {
        Collections.sort(songsList, new PriceComparator());
    }
    }); 
          final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML from URL
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_CATEGORY);

1つのクラスを作成し、以下のコードを記述しました。

public class PriceComparator implements Comparator<HashMap<String, String>> {
static final String KEY_COST = "Price"; 

public PriceComparator() {
    // TODO Auto-generated constructor stub

}



public int compare(HashMap<String, String> map1, HashMap<String, String> map2) {
    return map1.get(KEY_COST).compareTo(map2.get(KEY_COST));
}

今、私はアプリを実行し、ボタンをクリックする必要がありますが、何も起こらないことを意味しますか????

しかし、私は製品リストを価格でソートして表示する必要があります。

4

3 に答える 3

2

カスタム Comparator を使用する必要があると思います:

Comparator<HashMap<String, String>> comparator = new Comparator<HashMap<String, String>>() {
    @Override
    public int compare(HashMap<String, String> map1, HashMap<String, String> map2) {
        return map1.get(KEY_COST).compareTo(map2.get(KEY_COST));
    }
};

次に、アダプターを作成する前にリストを並べ替えます。

Collections.sort(songsList, comparator);

追加
いくつかの小さな変更を行う必要があります。

  1. と のようにsongsList、フィールド変数を作成します。listadapter

    ListView list;
    ListAdapter adapter;
    ArrayList<HashMap<String, String>> songsList; // Add me!
    
  2. 初期化方法を更新しますsongsList

    songsList = new ArrayList<HashMap<String, String>>(); // Shorten me!
    
  3. onClickメソッドを変更します。

    public void onClick(View v) {
        Collections.sort(songsList, comparator);
        adapter.notifyDataSetChanged(); // Add me!
    }
    
于 2012-12-05T06:55:42.800 に答える
1

価格順で商品をリストビューに表示する

=> ArrayList> を使用しているため、比較を行うためにカスタム Comparator を作成する必要があります。

例えば:

public class PriceComparator implements Comparator<HashMap<String, String>> {

    public PriceComparator() {
        // TODO Auto-generated constructor stub
    }


    public int compare(HashMap<String, String> map1, HashMap<String, String> map2) {
        return map1.get(KEY_COST).compareTo(map2.get(KEY_COST));
    }
}

このカスタム コンパレータを ArrayList> に適用するには、次のようにします。

Collections.sort(mylist, new PriceComparator());
于 2012-12-05T06:56:42.897 に答える
0

Hashtable を使用して、次のようにキーを並べ替えます。

ここで、hashTable には名前と価格が含まれ、キーには価格が含まれるため、キーを並べ替えて、並べ替えられた要素を sortedItems Vector に追加すると、並べ替えられた要素が返されます。

Hashtable hash = new Hashtable();
Vector<String> sortedItems = new Vector<String>();
Enumeration enumeration = hash .keys();
        Vector keySet = new Vector();
        while (enumeration.hasMoreElements()) {
            keySet.add(enumeration.nextElement());
        }

        Collections.sort(keySet);
        Iterator i = keySet.iterator();
        String str;
        while (i.hasNext()) {
            str = (String) i.next();
            sortedItems.addElement(hash .get(str));
            Log.e("", (str + ":" + hash .get(str)));
        }
于 2012-12-05T06:56:34.970 に答える