2012-01-10 151 views
1

我正在构建一个应用程序,其中一个列表视图显示我的收藏夹粉丝列表。我的球迷名单是this! 当我在这个列表中的任何项目单击然后告诉我关心的完整个人资料范如this 我的代码 - >如何从ListView中删除项目

public class FavouriteFansActivity extends ListActivity implements OnItemClickListener, OnLongClickListener { 
ListView mFavFansListView; 
JSONArray jArrayFavFans;//jArrayFavFans that contains jobjects of all fans. each jobj hv data of 1 unique fan! 
JSONObject jFavFan_Data;//contain data of an indivisual fan 

LazyAdapter adapter; 
ArrayList<Object> favFansList; 
ArrayList<String> mfavFansImgs; 
ItemBean bean; 

String favFans; 

//String url="http://XXXXX/ManU/";//Live 
String url="http://XXXXX/ManU/";//Local 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.on_favourite_fan_list); 

    prepareFavFanArrayLits();//method that prepare list of my favorite fans.... 

    mFavFansListView = (ListView) findViewById(android.R.id.list); 
    adapter = new LazyAdapter(this, mfavFansImgs, favFansList); 
    mFavFansListView.setAdapter(adapter); 

    mFavFansListView.setOnItemClickListener(this); 
    mFavFansListView.setOnLongClickListener(this); 

    /** I am still not getting that when to call onPause(), onResume(), onRestart()... etc ??? */ 

} 

/* .........onItemClick......... */ 
     @Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) { 
    // TODO Auto-generated method stub 
    ItemBean bean = (ItemBean) adapter.getItem(position); 

/**from here-> I am going to start one activity that show the complete profile of a 
    * particular Fan... According to the unique id received from clicking on ListItem!  
    */ 

    Intent in= new Intent(getParent(), FavFanProfile.class); 
    TabGroupActivity prnt = (TabGroupActivity) getParent(); 

    Bundle fBundle= new Bundle(); 
    fBundle.putString("fanId", bean.getUid()); 

    in.putExtras(fBundle); 
    prnt.startChildActivity("FavFanProfile", in); 

} 

/* .........onLongClick......... */ 
@Override 
public boolean onLongClick(View v) { 
    // TODO Auto-generated method stub 
    Toast.makeText(FavouriteFansActivity.this, "To remove...Clk", Toast.LENGTH_SHORT).show(); 
    return false; 
} 


/** Method used to prepare the List of Favorite Fans 
* @author Rupesh */ 
public void prepareFavFanArrayLits() { 
    /* return me array containing data of all favFans */ 

    Boolean mkFavFansList=false; 

    SharedPreferences favFansData = getSharedPreferences("jArrayFavFansPref", MODE_WORLD_WRITEABLE); 
    favFans=favFansData.getString("favFansData", ""); 
    Log.i("FavFans_List->", "FavFans_DATA readed from prefs:"+favFans.toString()); 
    if(!favFans.equals("")){ 
     try { 
      mkFavFansList=true; 
      jArrayFavFans=new JSONArray(favFans); 
      favFansList = new ArrayList<Object>(); 
      mfavFansImgs = new ArrayList<String>(); 
      Log.i("fav_fansONfav", jArrayFavFans.toString()); 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    }else { 
     Log.i("else_favList_img", "list & image are initialized"); 
     favFansList = new ArrayList<Object>(); 
     mfavFansImgs = new ArrayList<String>(); 
    } 

    // ++++++++ 
    if(mkFavFansList){ 
     try { 
      for (int i = 0; i < jArrayFavFans.length(); i++) { 
       // will return the data of each row fetched from JSONArray returned by location1.php 
       String data_of_each_user = jArrayFavFans.get(i).toString(); 

       Log.i("Data Of User at index " + i + " is", data_of_each_user); 

       // I put the object at index "i" into JSONObject & retrieve data from name-value pair 
       jFavFan_Data = jArrayFavFans.getJSONObject(i);// data of User at index i 
                // in array 

       AddObjectToList(jFavFan_Data.getString("uniqid").toString(), jFavFan_Data.getString("name"), 
         jFavFan_Data.getString("distance")); 

       //Log.i("URL", url+"images/"+jFavFan_Data.get("uniqid").toString()+".png"); 
       mfavFansImgs.add(url+"images/"+jFavFan_Data.get("uniqid").toString()+".png"); 
       Log.i("IMG_URL", url+"images/"+jFavFan_Data.get("uniqid").toString()+".png"); 

       String nm = jFavFan_Data.get("name").toString(); 
       String uid = jFavFan_Data.get("uniqid").toString(); 
       String dis = jFavFan_Data.get("distance").toString(); 

       //System.out.println("Your Name:  " + nm); 
       System.out.println("Your Unique Id: " + uid); 
       //System.out.println("Your Distance: " + dis); 
      } 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
    } else { 
     Log.i("NO_FAVORITE_FANS", "No Favorite Fans are added in favorites List!"); 
     Toast.makeText(FavouriteFansActivity.this, "No Fans in Favorite List!", Toast.LENGTH_SHORT).show(); 
    } 
     // ++++++++++ 
} 

    //**********************setting vales in bean************************* 

public void AddObjectToList(String uid, String title, String desc) { 
    bean = new ItemBean(); 
    bean.setUid(uid); 
    bean.setDescription(desc); 
    bean.setTitle(title); 
    favFansList.add(bean); 
} 

//*********************************************** 

@Override 
    protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    Log.i("favFansData_FavoriteFansActivity.java", "hi...on resume"+favFans); 
    prepareFavFanArrayLits(); 

    setContentView(R.layout.on_favourite_fan_list); 

    mFavFansListView = (ListView) findViewById(android.R.id.list); 
    adapter = new LazyAdapter(this, mfavFansImgs, favFansList); 
    mFavFansListView.setAdapter(adapter);// come null pointer exception when no fan data is returned! hendle it... 

    mFavFansListView.setOnItemClickListener(this); 
    } 
} 

在该点停留 - >也就是说,如何从这个列表中移除一个项目(一个粉丝)(favorite_fans_list)... ???

我尝试在onLongClick Listener上做些事情,但它并没有工作....我很高兴有任何指针或一些样本帮助我克服这个问题!

+0

简单地从源中删除的位置,并加载列表视图再次 – Abhi 2012-01-10 15:09:06

回答

1

一种方法是修改适配器中的内容,然后通知列表视图已更改。

+0

是更好的办法是从适配器notifydatasetchange删除项目,更新您的列表视图... – 2012-01-10 13:50:45

+0

@jox:感谢您的宝贵回应!我尝试过,但没有得到理想的结果,请您详细说明。 – 2012-01-10 15:03:11

1

您的适配器持有支持它的数据的ArrayList。

您需要从列表中删除对象。然后通知适配器该设备已如下更改。

favFansList.remove(index); 
adapter.notifyDataSetChanged()