2013-10-07 2 views
0

im insert arraylist on listview внутри функция cal, которая работает на фоне, но проблема в том, что если я нажимаю несколько раз на кнопку 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; 
} 

    } 

ответ

1

Использование

notifyDataSetChanged();

Например

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

    yourlistview.setAdapter(adapter); 

Установить адаптер, как это на первый раз. И, например, если вы добавите новые данные в список массивов данных вот так.

data.add("newdata"); 

Так вы адаптер необходимо знать изменение имеет происходят так использовать notifyDataSetChanged();, как показано ниже

adapter.notifyDataSetChanged(); 

Это Refresh представление списка с новыми данными added.Notify набор данных изменений после U добавить или удалить какие-либо данные от вас адаптера. Надеюсь, это поможет вам

+0

где i place adapter.notifyDataSetChanged() над этой строкой или ниже этой строки в вашем списке.setAdapter (адаптер); –

+0

только после установки ваш адаптер сначала. – Ramz

+0

вам нужно использовать adapter.notifyDataSetChanged() после того, как вы внесете изменения в свои данные. Затем будет обновляться только просмотр списка – Ramz

0

Вы можете использовать notifyDataSetChanged() на вашем Adapter, что я не вижу в вашем коде.

+0

где я использую это ??? на постэкскурентном или на заднем плане ???? –

+0

@smartguy В любое время вы добавляете некоторые данные к тому, что должен отображать адаптер. –

+0

emil my listview показать дубликаты данных, если я нажимаю несколько раз на кнопке –

0

после добавления элемента или удаления списка пасса пункта снова к списку адаптеру

+0

где? не получилось ??? –

+0

назовите это после изменения listCategory.setAdapter (cla); –

+0

u mean after thids line listCategory.setAdapter (cla) write notifyDataSetChanged() ??? –

0

После установки значений в вашей ListView вам нужно очистить ArrayList в методе 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; 
} 
+0

показывает код ошибки crash –

+0

Какую ошибку вы получаете после logcat. – GrIsHu

+0

u wirte clearData(); после listadapter, поэтому listview null –

Смежные вопросы