1

I would like to refresh the ListView every time I change the base data. Please see the following example:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mListUsers = getUsers();
lvList = (ListView) findViewById(R.id.event_list);
lvList.setAdapter(new ListAdapter(mContext, R.id.event_list, mListUsers));

    btn_next=(Button)findViewById(R.id.btn_next);
btn_next.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
 SimpleDateFormat postFormater = new SimpleDateFormat("dd-MMM-yyyy",Locale.ENGLISH); 
 String newDateStr = lbl_date.getText().toString();         
 Calendar c = Calendar.getInstance();
 try {
 c.setTime(postFormater.parse(newDateStr));
 } catch (ParseException e) {
// TODO Auto-generated catch block
 e.printStackTrace();
}
c.add(Calendar.DATE, 1);  // number of days to add
newDateStr = postFormater.format(c.getTime());
lbl_date.setText(newDateStr.toString());

mListUsers = getUsers();
lvList = (ListView) findViewById(R.id.event_list);
lvList.setAdapter(new ListAdapter(mContext, R.id.event_list, mListUsers));
}
});

}

public ArrayList<main_list_item> getUsers(){                
DBAdapter dbAdapter=DBAdapter.getDBAdapterInstance(this);
try {
            dbAdapter.createDataBase();
        } catch (IOException e) {
            Log.i("*** select ",e.getMessage());
        }
        dbAdapter.openDataBase();

        SimpleDateFormat curFormater1 = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = curFormater1.format(new Date(lbl_date.getText().toString()));
        String query;       
        if(all==1){
            query="SELECT id,dateS, dateE, (select eventname from tbEvent_name where tbEvent_name.id=eventId)as event FROM tbTransaction";
        }
        else{
            query="SELECT id,dateS, dateE, (select eventname from tbEvent_name where tbEvent_name.id=eventId)as event FROM tbTransaction WHERE SUBSTR(sDate,1,10)='"+dateString+"'";
        }

        ArrayList<ArrayList<String>> stringList = dbAdapter.selectRecordsFromDBList(query, null);
        dbAdapter.close();

        SimpleDateFormat curFormater = new SimpleDateFormat("yyyy-MM-dd",Locale.ENGLISH);
        Date dateObj = null;

        ArrayList<main_list_item> usersList = new ArrayList<main_list_item>();
        for (int i = 0; i < stringList.size(); i++) {
            ArrayList<String> list = stringList.get(i);
            main_list_item user = new main_list_item();
            try {
                user.id=Integer.parseInt(list.get(0));
                user.event= list.get(3);

        String newDateStr1 = postFormater1.format(dateObj);

                user.dateS=list.get(1);
                user.dateE=list.get(2);

            } catch (Exception e) {
                e.printStackTrace();
            }
            usersList.add(user);
        }
        return usersList;
    }

 // ***ListAdapter***
    private class ListAdapter extends ArrayAdapter<main_list_item> {  // --CloneChangeRequired
        private ArrayList<main_list_item> mList;  // --CloneChangeRequired
        private Context mContext;

        public ListAdapter(Context context, int textViewResourceId,ArrayList<main_list_item> list) { // --CloneChangeRequired
            super(context, textViewResourceId, list);
            this.mList = list;
            this.mContext = context;
        }

        public View getView(int position, View convertView, ViewGroup parent){
            View view = convertView;
            try{
            if (view == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = vi.inflate(R.layout.main_list_item, null);   // --CloneChangeRequired(list_item)
            }
            final main_list_item listItem = mList.get(position);    // --CloneChangeRequired                
            if (listItem != null) {
                // setting list_item views                      
                ((TextView) view.findViewById(R.id.lbl_id) ).setText( listItem.getId()+"");

                ((TextView) view.findViewById(R.id.lbl_event) ).setText( listItem.getEvent()+"");
                ((TextView) view.findViewById(R.id.lbl_sdate) ).setText( listItem.getsDate()+"");
                ((TextView) view.findViewById(R.id.lbl_edate) ).setText( listItem.geteDate()+"");

            }}catch(Exception e){
                e.printStackTrace();
            }

            return view;
        }       
    }

Its is correct way?

In this code I want to refresh listview when 'btn_next' click.

And also I want to separate two parts,put heading.

please give me guide..

thanks in advance

Uncaught handler: thread main exiting due to uncaught exception
java.lang.NullPointerException
at com.apt.eTrack.ETrackActivity$4.onClick(ETrackActivity.java:153)
at android.view.View.performClick(View.java:2344)
at android.view.View.onTouchEvent(View.java:4133)
at android.widget.TextView.onTouchEvent(TextView.java:6510)
at android.view.View.dispatchTouchEvent(View.java:3672)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
at    com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1712)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1202)
at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4203)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
at dalvik.system.NativeStart.main(Native Method)
Unable to open stack trace file '/data/anr/traces.txt': Permission denied
3
  • Can you tell what is there on line 153???? Commented Jul 21, 2011 at 10:39
  • mListAdapter.notifyDataSetChanged(); Commented Jul 21, 2011 at 10:41
  • according to this at com.apt.eTrack.ETrackActivity$4.onClick(ETrackActivity.java:153) mListAdapter should be null... check it. Commented Jul 21, 2011 at 11:17

1 Answer 1

1
static ListAdapter mListAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mListUsers = getUsers();
    mListAdapter=new ListAdapter(mContext, R.id.event_list, mListUsers);
    lvList = (ListView) findViewById(R.id.event_list);
    lvList.setAdapter(mListAdapter);

    btn_next=(Button)findViewById(R.id.btn_next);
    btn_next.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            SimpleDateFormat postFormater = new SimpleDateFormat("dd-MMM-yyyy",Locale.ENGLISH); 
            String newDateStr = lbl_date.getText().toString();         
            Calendar c = Calendar.getInstance();
            try {
                c.setTime(postFormater.parse(newDateStr));
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            c.add(Calendar.DATE, 1);  // number of days to add
            newDateStr = postFormater.format(c.getTime());
            lbl_date.setText(newDateStr.toString());

            mListUsers = getUsers();
            mListAdapter.notifyDataSetChanged();
        }
    });
}
Sign up to request clarification or add additional context in comments.

2 Comments

sorry folk no idea about it, do R&D surely you will get through
How come I can't find the method "notifyDataSetChanged()" in the class android.widget.ListAdapter? Isn't that the one you are using? Can't find "notifyDataSetChanged" in the documentation for ListAdapter...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.