Search code examples
androidstringstringbuffer

passing String buffer into array into List in android


I need to show all call log in fragment layout, for sample I just tried to display that phone number and a value. Here String phNum. When ever I try to show all call logs it shows only last call log due to Static string in List<model>. I know, I have used a StringBuffer to collect. So for Here List<Model> I need to pass string buffer I can't do that. If possible anyone please give idea to solve this.

My Class file:

public class CallFragment extends Fragment {
    static String phNum;
    String callDuration;
    Date callDate;
    String phNum1;
    String callType = null;
    TextView t;
    ListView l;
    StringBuffer sb;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        getdetails();
        FragmentManager fm = getFragmentManager();
        if (fm.findFragmentById(android.R.id.content) == null) {
            DataListFragment list = new DataListFragment();
            fm.beginTransaction().add(android.R.id.content, list).commit();
        }
        return null;
    }
    private void getdetails() {
        // TODO Auto-generated method stub
        sb = new StringBuffer();
        String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
        Cursor managedCursor = getActivity().getContentResolver().query(
                CallLog.Calls.CONTENT_URI, null, null, null, strOrder);
        int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
        int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
        int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
        int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
        sb.append("Call Log :");
        while (managedCursor.moveToNext()) {
            phNum = managedCursor.getString(number);
            String callTypeCode = managedCursor.getString(type);
            String strcallDate = managedCursor.getString(date);
            callDate = new Date(Long.valueOf(strcallDate));
            callDuration = managedCursor.getString(duration);
            int callcode = Integer.parseInt(callTypeCode);
            switch (callcode) {
            case CallLog.Calls.OUTGOING_TYPE:
                callType = "Outgoing";
                break;
            case CallLog.Calls.INCOMING_TYPE:
                callType = "Incoming";
                break;
            case CallLog.Calls.MISSED_TYPE:
                callType = "Missed";
                break;
            }
            sb.append("\nPhone Number: " + phNum + " \nCall Type: "+ callType + " \nCall Date: " + callDate+ " \nCall duration in sec : " + callDuration);
        System.out.println("phNum : " + phNum);
        }
        managedCursor.close();
    }
    public static class DataListFragment extends ListFragment implements
            LoaderManager.LoaderCallbacks<List<Model>> {
        CustomArrayAdapter mAdapter;
        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            System.out.println("DataListFragment.onActivityCreated");
            setEmptyText("No Data Here");
            mAdapter = new CustomArrayAdapter(getActivity());
            setListAdapter(mAdapter);
            setListShown(false);
            getLoaderManager().initLoader(0, null, this);
        }
    }
    public static class DataListLoader extends AsyncTaskLoader<List<Model>> {
        List<Model> mModels;
        public DataListLoader(Context context) {
            super(context);
        }
        @Override
        public List<Model> loadInBackground() {
            System.out.println("DataListLoader.loadInBackground");
            List<Model> entries = new ArrayList<Model>();
            entries.add(new Model(phNum, "2"));
            return entries;
        }
        @Override
        public void deliverResult(List<Model> listOfData) {
            if (isReset()) {
                if (listOfData != null) {
                    onReleaseResources(listOfData);
                }
            }
            List<Model> oldApps = listOfData;
            mModels = listOfData;
            if (isStarted()) {
                super.deliverResult(listOfData);
            }
            if (oldApps != null) {
                onReleaseResources(oldApps);
            }
        }
        @Override
        protected void onStartLoading() {
            if (mModels != null) {
                deliverResult(mModels);
            }
            if (takeContentChanged() || mModels == null) {
                forceLoad();
            }
        }
        @Override
        protected void onStopLoading() {
            cancelLoad();
        }
        @Override
        public void onCanceled(List<Model> apps) {
            super.onCanceled(apps);
            onReleaseResources(apps);
        }
        @Override
        protected void onReset() {
            super.onReset();
            onStopLoading();
            if (mModels != null) {
                onReleaseResources(mModels);
                mModels = null;
            }
        }
        protected void onReleaseResources(List<Model> apps) {
        }
    }
}

Model file:

public class Model {
    private String name;
    private String id;
    public Model(String name, String id) {
        this.name = name;
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}

Solution

  • Solution here

        public class CallLogFragment extends Fragment
    {
        private View view;
        private ListView list_calllog;
        private ArrayList<HashMap<String,String>> callLog;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
        {
            if(view==null)
            {
                view=inflater.inflate(R.layout.fragment_call_log_layout, container,false);
            }   
            else
            {
                ViewGroup parent = (ViewGroup) view.getParent();
                parent.removeView(view);
            }   
    
            callLog=getCallLog();
            CustomCallLogListAdapter adapter=new CustomCallLogListAdapter(getActivity(),R.layout.row_call_log_layout,callLog);
            list_calllog=(ListView)view.findViewById(R.id.list_calllog);
            list_calllog.setAdapter(adapter);
            return view;
        }
    
        @SuppressLint("NewApi")
        public ArrayList<HashMap<String,String>> getCallLog()
        {
            ArrayList<HashMap<String,String>> callLog=new ArrayList<HashMap<String,String>>();
            CursorLoader cursorLoader=new CursorLoader(getActivity(),CallLog.Calls.CONTENT_URI, null, null, null, null);
            Cursor cursor=cursorLoader.loadInBackground();
            if(cursor.moveToFirst())
            {
                while (cursor.moveToNext())
                {
                    HashMap<String,String> hashMap=new HashMap<String, String>();
                    hashMap.put(CallLog.Calls.NUMBER, cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)));
                    hashMap.put(CallLog.Calls.DATE, cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE)));
                    hashMap.put(CallLog.Calls.DURATION, cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION)));   
                    callLog.add(hashMap);
                }
            }
            return callLog;
        }
    }