2011-11-23 131 views
0

我通過擴展ArrayAdapter創建自定義ListView。當我第一次訪問該活動時,它顯示正確。當我回去重訪活動。它在實際數組的末尾再次重複內容。我如何處理重複的內容?自定義列表視圖duplitcating項目

定義適配器

public class ListAdapter extends ArrayAdapter<Item> { 

    public ListAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
     // TODO Auto-generated constructor stub 
    } 

    private List<Item> items; 

    public ListAdapter(Context context, int resource, List<Item> items) { 
     super(context, resource, items); 
     this.items = items; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 

     if (v == null) { 
      LayoutInflater vi; 
      vi = LayoutInflater.from(getContext()); 
      v = vi.inflate(R.layout.list_item_default, null); 
     } 

     Item p = items.get(position); 

     if (p != null) { 

      TextView list_title = (TextView) v.findViewById(R.id.list_title); 
      TextView list_description = (TextView) v 
        .findViewById(R.id.list_description); 
      TextView list_timestamp = (TextView) v 
        .findViewById(R.id.list_timestamp); 
      ImageView list_image = (ImageView) v.findViewById(R.id.list_image); 

      if (list_title != null) { 
       list_title.setText(p.getItemTitle()); 
      } 

      if (list_description != null) { 
       list_description.setText(p.getItemDescription()); 
      } 

      if (list_timestamp != null) { 
       list_timestamp.setText(p.getItemTimestamp()); 
      } 

      if (list_image != null) { 
       Log.d("bMobile", "inside getView() image"); 
       try { 
        URL imageURL = new URL(p.getItemImage()); 
        HttpURLConnection con = (HttpURLConnection) imageURL 
          .openConnection(); 
        InputStream inputStrem = con.getInputStream(); 
        Bitmap image = BitmapFactory.decodeStream(inputStrem); 
        if (null != image) 
         list_image.setImageBitmap(image); 
        else 
         Log.d("bMobile", "Bitmap is Null"); 
       } catch (Exception e) { 
       } 
      } 
     } 

     return v; 
    } 

} 

活動

public class MessagesActivity extends Activity { 

    ListView listview; 
    static ArrayList<Item> dataArray = new ArrayList<Item>(); 
    static ArrayList<Item> contentArray = new ArrayList<Item>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_messages); 

     setupViews(); 
     try { 
      contentArray = generateArray(createJson()); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     listview.setAdapter(new ListAdapter(MessagesActivity.this, 
       R.layout.list_item_default, contentArray)); 
    } 

    public void setupViews() { 

     listview = (ListView) findViewById(R.id.list_items); 

     ((TextView) findViewById(R.id.title_text)) 
       .setText(R.string.description_messages); 
    } 

    // It creates a JSON and returns JSON string 
    public String createJson() throws JSONException { 
     JSONArray itemArray = new JSONArray(); 

     JSONObject itemObject1 = new JSONObject(); 
     itemObject1.put("title", "Harsha MV"); 
     itemObject1.put("timestamp", "2 hours"); 
     itemObject1.put("description", "Bangalore, India"); 
     itemObject1.put("display_photo", "http://i.imgur.com/enUZr.jpg"); 

     JSONObject itemObject2 = new JSONObject(); 
     itemObject2.put("title", "Avinash G"); 
     itemObject2.put("timestamp", "4 days"); 
     itemObject2.put("description", "Mysore, India"); 
     itemObject2.put("display_photo", "http://noblevelop.com/wp-content/uploads/2011/06/profile.jpg"); 

     JSONObject itemObject3 = new JSONObject(); 
     itemObject3.put("title", "Jyosna Sahoo"); 
     itemObject3.put("timestamp", "1 year"); 
     itemObject3.put("description", "Rourkela, India"); 
     itemObject3.put("display_photo", "http://noblevelop.com/wp-content/uploads/2011/06/profile.jpg"); 

     itemArray.put(itemObject1); 
     itemArray.put(itemObject2); 
     itemArray.put(itemObject3); 

     return itemArray.toString(); 
    } 

    public ArrayList<Item> generateArray(String JSONdata) throws JSONException { 

     JSONArray listData = new JSONArray(JSONdata); 
     for (int i = 0; i < listData.length(); i++) { 

      JSONObject listObject = listData.getJSONObject(i); 
      String item_title = listObject.getString("title"); 
      String item_description = listObject.getString("description"); 
      String item_timestamp = listObject.getString("timestamp"); 
      String item_image = listObject.getString("display_photo"); 

      Item ObjectItem = new Item(item_title, item_timestamp, 
        item_description, item_image); 
      dataArray.add(ObjectItem); 

     } 
     return dataArray; 
    } 

} 
+1

發表您的活動和適配器代碼。 .. –

+0

你可以添加一些代碼嗎? ArrayAdapter創建將成功 –

+0

可能你的arraylist保留舊的值,並再次添加到它。更好的張貼部分的代碼。 – androidGuy

回答

1

修改您的generateArray()這樣

public ArrayList<Item> generateArray(String JSONdata) throws JSONException { 
     ArrayList<Item> dataArray = new ArrayList<Item>(); 

     //rest of your code.. 
     return dataArray; 
} 
1

dataArray的將在每個onCreate增長(這是每次顯示視圖時的稱呼),因爲你增加新的項目。

只需在數據陣列上清除onCreate開始時必須解決您的問題。

1

改變你的getView方法,它會work..I我張貼的代碼......

public View getView(int position, View convertView, ViewGroup parent) { 
    convertView=null; 
    View v; 
    LayoutInflater vi; 
    vi = LayoutInflater.from(getContext()); 
    v = vi.inflate(R.layout.list_item_default, null); 


    Item p = items.get(position); 

    if (p != null) { 

     TextView list_title = (TextView) v.findViewById(R.id.list_title); 
     TextView list_description = (TextView) v 
       .findViewById(R.id.list_description); 
     TextView list_timestamp = (TextView) v 
       .findViewById(R.id.list_timestamp); 
     ImageView list_image = (ImageView) v.findViewById(R.id.list_image); 

     if (list_title != null) { 
      list_title.setText(p.getItemTitle()); 
     } 

     if (list_description != null) { 
      list_description.setText(p.getItemDescription()); 
     } 

     if (list_timestamp != null) { 
      list_timestamp.setText(p.getItemTimestamp()); 
     } 

     if (list_image != null) { 
      Log.d("bMobile", "inside getView() image"); 
      try { 
       URL imageURL = new URL(p.getItemImage()); 
       HttpURLConnection con = (HttpURLConnection) imageURL 
         .openConnection(); 
       InputStream inputStrem = con.getInputStream(); 
       Bitmap image = BitmapFactory.decodeStream(inputStrem); 
       if (null != image) 
        list_image.setImageBitmap(image); 
       else 
        Log.d("bMobile", "Bitmap is Null"); 
      } catch (Exception e) { 
      } 
     } 
    } 

    return v; 
}