2017-01-15 134 views
2

我创建了一个可扩展列表视图,它在列表视图到达bottom时从sqlite加载数据。它再次从sqlite使用异步任务加载另一组数据。在此标题使用新数据更新,但最新数据的子视图为空,任何人都可以告诉我如何在新数据加载时更新/刷新可扩展列表适配器。如何在添加新项目时更新Expandable列表视图

适配器:

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,但它没有奏效。

回答

0

您需要设置适配器认为,onPostExecute()方法内:

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