0

我在函数 cal 内的 listview 上插入 arraylist,该函数在后台运行,但问题是如果我多次单击按钮 listview 显示重复值如何刷新或限制 listview 仅显示当前值每个按钮单击删除所有以前的???按钮 e01;

           static ArrayList<Long> Category_ID = new ArrayList<Long>();
static ArrayList<String> school_name = new ArrayList<String>();
static ArrayList<String> menu_name = new ArrayList<String>();

static ArrayList<String> dish_name = new ArrayList<String>();
static ArrayList<String> day = new ArrayList<String>();

static ArrayList<Long> Vacation_ID = new ArrayList<Long>();
static ArrayList<String> Vacation_name = new ArrayList<String>();
static ArrayList<String> Vacation_Date = new ArrayList<String>();

String mydate;

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



            void clearData() {

    Category_ID.clear();
    school_name.clear();
    menu_name.clear();
    dish_name.clear();
    day.clear();

    Vacation_ID.clear();
    Vacation_name.clear();
    Vacation_Date.clear();

}







              public class getDataTask extends AsyncTask<Void, Void, Void> {

    getDataTask() {
        if (!prgLoading.isShown()) {
            prgLoading.setVisibility(0);
            txtAlert.setVisibility(8);

        }
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        // TODO Auto-generated method stub
        parseJSONData();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        prgLoading.setVisibility(8);

        if ((Category_ID.size() > 0) || IOConnect == 0) {

            listCategory.setAdapter(cla);





        } 
    }
}






                 public void parseJSONData() {
    clearData();
    SelectMenuAPI = Utils.Schoolmenu + Cat_name + "&lid=" + SchoolLevelId;
    zero1check = valll.toString();


    URL = SelectMenuAPI;
    URL2 = URL.replace(" ", "%20");

    SelectMenuAPI2 = Utils.SchoolVacation;

    clearData();
    URL3 = SelectMenuAPI2;
    URL4 = URL3.replace(" ", "%20");

    if (zero1check.equals("0"))
        byweekdate = Todayday + 1;
    else if (zero1check.equals("1")) {
        byweekdate = Todayday + 2;

    }

    try {

          Log.i("url",""+URL2);

        HttpClient client = new DefaultHttpClient();
        HttpConnectionParams
                .setConnectionTimeout(client.getParams(), 15000);
        HttpConnectionParams.setSoTimeout(client.getParams(), 15000);
        HttpUriRequest request = new HttpGet(URL2);
        HttpResponse response = client.execute(request);

        HttpEntity resEntity = response.getEntity();
        _response=EntityUtils.toString(resEntity);
          String str2 = "";
        str2=   _response2;

           JSONArray school = json2.getJSONArray("data");

                for (int i = 0; i < school.length(); i++) {
                    JSONObject object = school.getJSONObject(i);
                    if (count == 1) {
                        count = 0;
                        break;
                    } else

        if (object.getString("Schedule").equals("weekly")) {

    if (object.getString("day").equals(Todayday)) {
    Category_ID.add((long) i);
    school_name.add(object.getString("school_name"));


       dish_name.add(object.getString("dish_name"));


         menu_name.add(object.getString("menu_title"));

                            day.add(object.getString("day"));
                            count = count + 1;

String[] mVal = new String[school.length()];

    for (int k = 0; k < school.length(); k++) {
    mVal[k] = school.getJSONObject(k).getString("menu_title");
        message = "weekly";
            mVal2 = mVal[0];



                            }











@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {

    case R.id.e01:
            new getDataTask().execute();

        break;





                 public class thirdstepAdapter extends BaseAdapter {

    private Activity activity;

String[] Main_menu;

public thirdstepAdapter(Activity act) {
    this.activity = act;

}
@Override
public int getCount() {
    // TODO Auto-generated method stub
//  return Main_menu.length;
    return thirdstep.Category_ID.size();
}
@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return position;
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;

    if(convertView == null){
        LayoutInflater inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.main_menu_item, null);
        holder = new ViewHolder();

        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtText = (TextView) convertView.findViewById(R.id.txtText);

    holder.txtText.setText(thirdstep.dish_name.get(position));

    return convertView;
}

static class ViewHolder {
    TextView txtText;
}

   }
4

4 回答 4

1

利用

notifyDataSetChanged();

例如

 Arraylist<String> data=new Arraylist<String>();
Mycustum_adaptor adapter = new Mycustum_adaptor (data);

    yourlistview.setAdapter(adapter);

第一次这样设置适配器。例如,如果您将新数据添加到这样的数组列表数据中。

data.add("newdata");

所以你的适配器需要知道发生了变化所以使用notifyDataSetChanged(); 像下面

 adapter.notifyDataSetChanged();

这将使用添加的新数据刷新列表视图。在您从适配器添加或删除任何数据后通知数据集更改。希望对你有帮助

于 2013-10-07T06:52:28.783 回答
0

你可以notifyDataSetChanged()在你的上使用Adapter,我在你的代码中并没有真正看到。

于 2013-10-07T06:15:30.750 回答
0

再次添加项目或删除项目的传递列表到列表适配器后

于 2013-10-07T06:16:35.267 回答
0

在列表视图中设置值后,您需要清除getDataTask()方法中的数组列表。由于您没有清除 Arraylist,这是它显示重复值的唯一原因。

     @Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    prgLoading.setVisibility(8);
    if ((Category_ID.size() > 0) || IOConnect == 0) {
        listCategory.setAdapter(cla);
       clearData();
    } 

还修改您clearData()的如下:

   void clearData() {
         Category_ID.clear();
          Category_ID=null;
         school_name.clear();
         school_name=null;
         menu_name.clear();
         menu_name=null;
         dish_name.clear();
         dish_name=null;
         day.clear();
         day=null;  
         Vacation_ID.clear();
         Vacation_ID=null;
         Vacation_name.clear();
         Vacation_name=null;
         Vacation_Date.clear();
         Vacation_Date=null;
}
于 2013-10-07T06:29:48.980 回答