0

これは、フラグメントをロードするためのビュー ページャー アダプターです。getItem() メソッド内で、その関数に渡されたインデックスを使用して値を動的に挿入しようとしています。productData 内にすべてのデータがあります。しかし、それは常にの値を取得します

 productData.get(0).get("name")

すべての断片に。インデックス値はフラグメントに正しく渡されています。確認しました。また、productData 内のデータも正しいです。ここで問題はどこにありますか?

  public class ProductViewPagerAdapter extends FragmentPagerAdapter {
    public ProductViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int i) {            
        Fragment fragment = new ProductViewFragment();
        Bundle args = new Bundle();
        args.putInt("number", i + 1);
        args.putString("name", productData.get(i).get("name"));
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 10;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return "test1";
            case 1: return "2";
            case 2: return "3";
            case 3: return "4";
        }
        return null;
    }     

 }
4

2 に答える 2

1

The problem is that you only have a single HashMap. Even though you keep changing the data inside the HashMap, the list productItems just contains 10 references to the single HashMap. So in the end, it will contain 10 copies of the final set of data.

What you want to do is create a new HashMap for each loop iteration. Here's the modified code:

public ArrayList<HashMap<String,String>> getData(AsyncTask<Void, Void, Void> asynctask, String query) throws URISyntaxException
{
    api_url += query;
    //  Log.v("API url",api_url);
    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(api_url); // getting XML
    Document doc = parser.getDomElement(xml); // getting DOM element
    NodeList nl = doc.getElementsByTagName(KEY_PRODUCT);
    ArrayList<HashMap<String, String>> productItems = new ArrayList<HashMap<String, String>>();
    for (int i = 0; i < 10; i++) {
        Element e = (Element) nl.item(i);           
        // adding each child node to HashMap key => value
        HashMap<String, String> map = new HashMap<String, String>();
        map.put(KEY_PROD_NAME, e.getAttribute(KEY_PROD_NAME));
        map.put(KEY_ID, e.getAttribute(KEY_MER_ID));
        map.put(KEY_PRICE, e.getAttribute(KEY_MER_PRICE));      
        Log.v("fsd:",e.getAttribute(KEY_PROD_NAME));
        // adding HashList to ArrayList
        productItems.add(map);      
    }       
    return productItems;    
}
于 2012-10-05T09:32:05.750 に答える
0

これがそれです、

public ArrayList<HashMap<String, String>> productItems = new ArrayList<HashMap<String, String>>();
public HashMap<String, String> map = new HashMap<String, String>();

public ArrayList<HashMap<String,String>> getData(AsyncTask<Void, Void, Void> asynctask, String query) throws URISyntaxException
{   
        api_url += query;
        //  Log.v("API url",api_url);
        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(api_url); // getting XML
        Document doc = parser.getDomElement(xml); // getting DOM element
        NodeList nl = doc.getElementsByTagName(KEY_PRODUCT);
    for (int i = 0; i < 10; i++) {          
        Element e = (Element) nl.item(i);           
        // adding each child node to HashMap key => value
        map.put(KEY_PROD_NAME, e.getAttribute(KEY_PROD_NAME));
        map.put(KEY_ID, e.getAttribute(KEY_MER_ID));
        map.put(KEY_PRICE, e.getAttribute(KEY_MER_PRICE));      
        Log.v("fsd:",e.getAttribute(KEY_PROD_NAME));
        // adding HashList to ArrayList
        productItems.add(map);      
    }       
    return productItems;    
}
于 2012-10-05T09:15:40.490 に答える