Как обновить список расширяемых списков при добавлении к нему нового элемента

Я создал расширяемое listview, которое загружает данные из sqlite, когда listview достигает bottom.It снова загружает другой набор данных из sqlite, используя async task.In это заголовок обновляется с новыми данными, но дочерний вид для последних данных пуст Может ли кто-нибудь сказать мне, как обновлять / обновлять расширяемый адаптер списка при загрузке новых данных.

адаптер:

public class DaybookExpandableAdapter extends BaseExpandableListAdapter { String updatedate = ""; private Context _context; private List<String> _listDataHeader; // header titles // child data in format of header title, child title private HashMap<String, List<Daybooklist>> _listDataChild; private DatabaseHandler databaseHandler; boolean isListScrolling; public DaybookExpandableAdapter(Context context, List<String> listDataHeader, HashMap<String, List<Daybooklist>> listChildData) { this._context = context; this._listDataHeader = listDataHeader; this._listDataChild = listChildData; } @Override public Object getChild(int groupPosition, int childPosititon) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)) .get(childPosititon); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { /*final String childText = (String) getChild(groupPosition, childPosition); final String childtime = (String) getChild(groupPosition,childPosition);*/ Daybooklist daybooklist = (Daybooklist) getChild(groupPosition, childPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.model_daybook_listitem, null); } TextView txtname = (TextView) convertView.findViewById(R.id.tv_daybook_name); TextView txttime = (TextView) convertView.findViewById(R.id.tv_daybook_time); TextView day_name = (TextView) convertView.findViewById(R.id.tv_daybook_name); TextView day_description = (TextView) convertView.findViewById(R.id.tv_daybook_description); TextView day_type = (TextView) convertView.findViewById(R.id.tv_daybook_type); TextView day_amount = (TextView) convertView.findViewById(R.id.tv_daybook_amount); TextView day_usertype = (TextView) convertView.findViewById(R.id.tv_usertype); TextView day_time = (TextView) convertView.findViewById(R.id.tv_daybook_time); ImageView day_check = (ImageView) convertView.findViewById(R.id.img_doneall); TextView daybook_location = (TextView) convertView.findViewById(R.id.tv_daybook_location); txtname.setText(daybooklist.getName()); txttime.setText(daybooklist.getCtime()); databaseHandler = new DatabaseHandler(_context); if (daybooklist.getUsertype() != null && !daybooklist.getUsertype().isEmpty()) { if (daybooklist.getUsertype().startsWith("farmer") | daybooklist.getUsertype().startsWith("singleworker") | daybooklist.getUsertype().startsWith("groupworker") | daybooklist.getUsertype().startsWith("payvehicle")) { if (daybooklist.getUsertype().startsWith("farmer")) { day_name.setText(daybooklist.getName()); day_description.setText(daybooklist.getDescription()); String mobno = daybooklist.getMobileno(); Log.e("mobno", mobno); String locat = String.valueOf(databaseHandler.getfarmerlocation(mobno)); locat = locat.replaceAll("\\[", "").replaceAll("\\]", ""); Log.e("farmerlocation", locat); daybook_location.setText(locat); day_type.setText(daybooklist.getType()); if (daybooklist.getName() != null && daybooklist.getName().startsWith("no")) { day_name.setText(" "); } else if (daybooklist.getDescription() != null && daybooklist.getDescription().startsWith("no")) { day_description.setText(" "); } day_amount.setText("\u20B9" + daybooklist.getExtraamt()); if (daybooklist.getAmountout().startsWith("0.0") | daybooklist.getAmountout().startsWith("0")) { // day_amount.setTextColor(activity.getResources().getColor(R.color.green)); Log.e("Amountout", daybooklist.getAmountout()); day_check.setVisibility(View.INVISIBLE); } else { // day_amount.setTextColor(activity.getResources().getColor(R.color.album_title)); Log.e("Amountout", daybooklist.getAmountout()); day_check.setVisibility(View.VISIBLE); } day_time.setText(daybooklist.getCtime()); } else { day_name.setText(daybooklist.getName()); day_description.setText(daybooklist.getDescription()); daybook_location.setText(daybooklist.getType()); day_type.setText(daybooklist.getType()); if (daybooklist.getName() != null && daybooklist.getName().startsWith("no")) { day_name.setText(" "); } else if (daybooklist.getDescription() != null && daybooklist.getDescription().startsWith("no")) { day_description.setText(" "); } day_amount.setText("\u20B9" + daybooklist.getExtraamt()); if (daybooklist.getAmountout().startsWith("0.0") | daybooklist.getAmountout().startsWith("0")) { // day_amount.setTextColor(activity.getResources().getColor(R.color.green)); Log.e("Amountout", daybooklist.getAmountout()); day_check.setVisibility(View.INVISIBLE); } else { // day_amount.setTextColor(activity.getResources().getColor(R.color.album_title)); Log.e("Amountout", daybooklist.getAmountout()); day_check.setVisibility(View.VISIBLE); } day_time.setText(daybooklist.getCtime()); } } else if (daybooklist.getUsertype().startsWith("advancefarmer") | daybooklist.getUsertype().startsWith("workeradvance") | daybooklist.getUsertype().startsWith("kgroupadvance") | daybooklist.getUsertype().startsWith("otherexpense") | daybooklist.getUsertype().startsWith("vehicle")) { if (daybooklist.getUsertype().startsWith("advancefarmer")) { day_name.setText(daybooklist.getName()); day_description.setText(daybooklist.getDescription()); day_type.setText(daybooklist.getType()); String mobno = daybooklist.getMobileno(); Log.e("mobno", mobno); String locat = String.valueOf(databaseHandler.getfarmerlocation(mobno)); locat = locat.replaceAll("\\[", "").replaceAll("\\]", ""); Log.e("farmerlocation", locat); daybook_location.setText(locat); if (daybooklist.getName() != null && daybooklist.getName().startsWith("no")) { day_name.setText(" "); } else if (daybooklist.getDescription() != null && daybooklist.getDescription().startsWith("no")) { day_description.setText(" "); } Log.e("amountout", daybooklist.getAmountout()); day_amount.setText("\u20B9" + daybooklist.getAmountout()); day_time.setText(daybooklist.getCtime()); } else { day_name.setText(daybooklist.getName()); day_description.setText(daybooklist.getType()); day_type.setText(daybooklist.getType()); daybook_location.setText(daybooklist.getDescription()); if (daybooklist.getName() != null && daybooklist.getName().startsWith("no")) { day_name.setText(" "); } else if (daybooklist.getDescription() != null && daybooklist.getDescription().startsWith("no")) { day_description.setText(" "); } Log.e("amountout", daybooklist.getAmountout()); day_amount.setText("\u20B9" + daybooklist.getAmountout()); day_time.setText(daybooklist.getCtime()); } } else if (daybooklist.getUsertype().startsWith("buyer")) { day_name.setText(daybooklist.getName()); day_description.setText(daybooklist.getDescription()); day_amount.setText("\u20B9" + daybooklist.getAmountin()); day_type.setText(" "); day_time.setText(daybooklist.getCtime()); daybook_location.setText(daybooklist.getType()); } if (daybooklist.getUsertype().startsWith("farmer")) { day_usertype.setText("F"); day_usertype.setBackgroundResource(R.drawable.textview_farmer); } else if (daybooklist.getUsertype().startsWith("advancefarmer")) { day_usertype.setText("FA"); day_usertype.setBackgroundResource(R.drawable.textview_farmer); } else if (daybooklist.getUsertype().startsWith("singleworker")) { day_usertype.setText("W"); day_usertype.setBackgroundResource(R.drawable.textview_worker); } else if (daybooklist.getUsertype().startsWith("workeradvance")) { day_usertype.setText("WA"); day_usertype.setBackgroundResource(R.drawable.textview_worker); } else if (daybooklist.getUsertype().startsWith("groupworker")) { day_usertype.setText("G"); day_usertype.setBackgroundResource(R.drawable.textview_worker); } else if (daybooklist.getUsertype().startsWith("kgroupadvance")) { day_usertype.setText("GA"); day_usertype.setBackgroundResource(R.drawable.textview_worker); } else if (daybooklist.getUsertype().startsWith("otherexpense")) { day_usertype.setText("E"); day_usertype.setBackgroundResource(R.drawable.textview_otherexpense); } else if (daybooklist.getUsertype().startsWith("vehicle")) { day_usertype.setText("V"); day_usertype.setBackgroundResource(R.drawable.textview_vehicle); } else if (daybooklist.getUsertype().startsWith("gsalary")) { day_usertype.setText("GS"); day_usertype.setBackgroundResource(R.drawable.textview_worker); } else if (daybooklist.getUsertype().startsWith("isalary")) { day_usertype.setText("WS"); day_usertype.setBackgroundResource(R.drawable.textview_worker); } else if (daybooklist.getUsertype().startsWith("payvehicle")) { day_usertype.setText("VP"); day_usertype.setBackgroundResource(R.drawable.textview_vehicle); } else if (daybooklist.getUsertype().startsWith("buyer")) { day_usertype.setText("B"); day_usertype.setBackgroundResource(R.drawable.textview_buyer); } } return convertView; } @Override public int getChildrenCount(int groupPosition) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)) .size(); } @Override public Object getGroup(int groupPosition) { return this._listDataHeader.get(groupPosition); } @Override public int getGroupCount() { return this._listDataHeader.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { final String headerTitle = (String) getGroup(groupPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.model_daybook_group, null); } TextView lblListHeader = (TextView) convertView .findViewById(R.id.tv_daybook_date); final ImageView img_pdg = (ImageView) convertView.findViewById(R.id.img_printpdf); lblListHeader.setTypeface(null, Typeface.BOLD); lblListHeader.setText(headerTitle); String strDate = headerTitle; SimpleDateFormat dateFormat = new SimpleDateFormat("ddMMMyyyy"); try { Date varDate = dateFormat.parse(strDate); dateFormat = new SimpleDateFormat("yyyy-MM-dd"); updatedate = dateFormat.format(varDate); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } img_pdg.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: img_pdg.setColorFilter(ContextCompat.getColor(_context, R.color.colorAccent)); break; case MotionEvent.ACTION_UP: img_pdg.clearColorFilter(); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( _context); // set title alertDialogBuilder.setTitle(R.string.app_name); // set dialog message alertDialogBuilder .setMessage(_context.getResources().getString(R.string.daybookreport) + headerTitle) .setCancelable(true) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // if this button is clicked, close // current activity Intent pdfreport = new Intent(_context, Activity_Daybookpdf.class); pdfreport.putExtra("date", updatedate); _context.startActivity(pdfreport); } }) .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // if this button is clicked, just close // the dialog box and do nothing img_pdg.clearColorFilter(); dialog.cancel(); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show(); Button nbutton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); nbutton.setTextColor(_context.getResources().getColor(R.color.colorAccent)); Button pbutton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); pbutton.setBackgroundColor(_context.getResources().getColor(R.color.colorAccent)); pbutton.setPadding(0, 10, 10, 0); pbutton.setTextColor(Color.WHITE); break; } return true; } }); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { img_pdg.setColorFilter(ContextCompat.getColor(_context, R.color.colorAccent)); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( _context); // set title alertDialogBuilder.setTitle(R.string.app_name); // set dialog message alertDialogBuilder .setMessage(_context.getResources().getString(R.string.daybookreport) + headerTitle) .setCancelable(true) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // if this button is clicked, close // current activity Intent pdfreport = new Intent(_context, Activity_Daybookpdf.class); pdfreport.putExtra("date", updatedate); _context.startActivity(pdfreport); } }) .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // if this button is clicked, just close // the dialog box and do nothing img_pdg.clearColorFilter(); dialog.cancel(); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show(); Button nbutton = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); nbutton.setTextColor(_context.getResources().getColor(R.color.colorAccent)); Button pbutton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); pbutton.setBackgroundColor(_context.getResources().getColor(R.color.colorAccent)); pbutton.setPadding(0, 10, 10, 0); pbutton.setTextColor(Color.WHITE); } }); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public void setTransactionList(List<String> newList, HashMap<String, List<Daybooklist>> childlist) { _listDataHeader.clear(); _listDataChild.clear(); _listDataHeader = newList; _listDataChild = childlist; notifyDataSetChanged(); } public void setVTransactionList(List<String> newList) { _listDataHeader = newList; notifyDataSetChanged(); } public void isScrolling(boolean isScroll) { isListScrolling = isScroll; Log.e("scrollcheck", String.valueOf(isListScrolling)); } 

}

Асинхронная задача:

  class LoadDataTask extends AsyncTask<String, Void, String> { Daybooklist daybooklist = new Daybooklist(); @Override protected String doInBackground(String... olimits) { String limits = null; kickstart = 2; olimit=20; Log.e("kickcheck", String.valueOf(kickstart)); loadingMore = true; try { limits = olimits[0]; Log.e("limitscheck",limits); daybooks = new ArrayList<Daybook>(); daybooks = databaseHandler.getAlldaybookentriesdatewise(olimit); daybooklists = new ArrayList<Daybooklist>(); listDataHeader = new ArrayList<String>(); listDataChild = new HashMap<String, List<Daybooklist>>(); for (int i = 0; i < daybooks.size(); i++) { String date = daybooks.get(i).getDate(); if (date != null) { String s = date; String[] spiliter = s.split("-"); String year = spiliter[0]; String month = spiliter[1]; String dates = spiliter[2]; if (month.startsWith("01")) { disorderedlist = dates + "Jan" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("02")) { disorderedlist = dates + "Feb" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("03")) { disorderedlist = dates + "Mar" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("04")) { disorderedlist = dates + "Apr" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("05")) { disorderedlist = dates + "May" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("06")) { disorderedlist = dates + "Jun" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("07")) { disorderedlist = dates + "Jul" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("08")) { disorderedlist = dates + "Aug" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("09")) { disorderedlist = dates + "Sep" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("10")) { disorderedlist = dates + "Oct" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("11")) { disorderedlist = dates + "Nov" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } else if (month.startsWith("12")) { disorderedlist = dates + "Dec" + year; disorderedlist = disorderedlist.replaceAll("\\s+", ""); } listDataHeader.add(disorderedlist); } chid = new ArrayList<Daybooklist>(); daybooklists = databaseHandler.getAllDaywisedaybookdetails(date); for (int j = 0; j < daybooklists.size(); j++) { String name = daybooklists.get(j).getName(); String desc = daybooklists.get(j).getDescription(); String type = daybooklists.get(j).getType(); String usertype = daybooklists.get(j).getUsertype(); String amtin = daybooklists.get(j).getAmountin(); String amtout = daybooklists.get(j).getAmountout(); String extamt = daybooklists.get(j).getExtraamt(); String mobno = daybooklists.get(j).getMobileno(); String dates = daybooklists.get(j).getSdate(); String time = daybooklists.get(j).getCtime(); if (name != null) { chid.add(new Daybooklist(name, desc, type, usertype, amtin, amtout, extamt, mobno, dates, time)); } } listDataChild.put(listDataHeader.get(i), chid); } } catch (Exception e) { e.printStackTrace(); } return disorderedlist; } @Override protected void onPostExecute(String disorderedlist) { // listAdapter = new DaybookExpandableAdapter(getApplicationContext(), listDataHeader, listDataChild); listAdapter.setTransactionList(listDataHeader,listDataChild); loadingMore = false; } @Override protected void onCancelled() { // Notify the loading more operation has finished loadingMore = false; } } 

Адаптер уведомляет:

  public void setTransactionList(List<String> newList, HashMap<String, List<Daybooklist>> childlist) { _listDataHeader.clear(); _listDataChild.clear(); _listDataHeader = newList; _listDataChild = childlist; notifyDataSetChanged(); } 

База данных:

  public ArrayList<Daybook> getAlldaybookentriesdatewise(int s) { ArrayList<Daybook> daybookDetails = new ArrayList<Daybook>(); String selectquery = "SELECT date,IFNULL(SUM(amountin),0) as amountin,IFNULL(SUM(amountout),0) as amountout,daybookusertype FROM daybookdetails GROUP BY strftime('%Y-%m-%d',date) ORDER BY strftime('%Y-%m-%d',date) DESC LIMIT " + s + ""; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(selectquery, null); if (cursor.moveToFirst()) { do { Daybook daybookentries = new Daybook(); daybookentries.setDate(cursor.getString(0)); daybookentries.setCashin(cursor.getString(1)); daybookentries.setCashout(cursor.getString(2)); daybookDetails.add(daybookentries); } while (cursor.moveToNext()); } cursor.close(); db.close(); return daybookDetails; } 

Я уже пробовал использовать notifydatasetchanged, но это не сработало.

Вы должны установить адаптер в представлении внутри onPostExecute() :

 protected void onPostExecute(String disorderedlist) { listAdapter = new DaybookExpandableAdapter(getApplicationContext(), listDataHeader, listDataChild); listView.setAdapter(listAdapter); listAdapter.setTransactionList(listDataHeader,listDataChild); loadingMore = false; } 
Intereting Posts