【问题标题】:How to to show call log in ListView on Fragment?如何在片段的 ListView 中显示通话记录?
【发布时间】:2017-03-03 09:22:23
【问题描述】:

我需要在片段的 ListView 中显示通话记录

   setListAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1,
            R.id.tvNameMain, conNames));
    return rootView;

所有代码

 private ListView mListView;

private ArrayList<String> conNames;
private ArrayList<String> conNumbers;
private ArrayList<String> conTime;
private ArrayList<String> conDate;
private ArrayList<String> conType;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_recents, container, false);
    mListView = (ListView)rootView.findViewById(R.id.list);

    conNames = new ArrayList<String>();
    conNumbers = new ArrayList<String>();
    conTime = new ArrayList<String>();
    conDate = new ArrayList<String>();
    conType = new ArrayList<String>();

    Cursor curLog = getAllCallLogs(getActivity().getContentResolver());

    setCallLogs(curLog);

    setListAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1,
            R.id.tvNameMain, conNames));
    return rootView;
}

类我的适配器

    private class MyAdapter extends ArrayAdapter<String> {

    public MyAdapter(Context context, int resource, int textViewResourceId,
                     ArrayList<String> conNames) {
        super(context, resource, textViewResourceId, conNames);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = setList(position, parent);
        return row;
    }

    private View setList(int position, ViewGroup parent) {
        LayoutInflater inf = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View row = inf.inflate(R.layout.liststyle, parent, false);

        TextView tvName = (TextView) row.findViewById(R.id.tvNameMain);
        TextView tvNumber = (TextView) row.findViewById(R.id.tvNumberMain);
        TextView tvTime = (TextView) row.findViewById(R.id.tvTime);
        TextView tvDate = (TextView) row.findViewById(R.id.tvDate);
        TextView tvType = (TextView) row.findViewById(R.id.tvType);

        tvName.setText(conNames.get(position));
        tvNumber.setText(conNumbers.get(position));
        tvTime.setText("( " + conTime.get(position) + "sec )");
        tvDate.setText(conDate.get(position));
        tvType.setText("( " + conType.get(position) + " )");

        return row;
    }
}

班级通话记录

    private void setCallLogs(Cursor curLog) {
    while (curLog.moveToNext()) {
        String callNumber = curLog.getString(curLog
                .getColumnIndex(android.provider.CallLog.Calls.NUMBER));
        conNumbers.add(callNumber);

        String callName = curLog
                .getString(curLog
                        .getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
        if (callName == null) {
            conNames.add("Unknown");
        } else
            conNames.add(callName);

        String callDate = curLog.getString(curLog
                .getColumnIndex(android.provider.CallLog.Calls.DATE));
        SimpleDateFormat formatter = new SimpleDateFormat(
                "dd-MMM-yyyy HH:mm");
        String dateString = formatter.format(new Date(Long
                .parseLong(callDate)));
        conDate.add(dateString);

        String callType = curLog.getString(curLog
                .getColumnIndex(android.provider.CallLog.Calls.TYPE));
        if (callType.equals("1")) {
            conType.add("Incoming");
        } else
            conType.add("Outgoing");

        String duration = curLog.getString(curLog
                .getColumnIndex(android.provider.CallLog.Calls.DURATION));
        conTime.add(duration);

    }
}

类光标

    public static Cursor getAllCallLogs(ContentResolver cr) {
    // reading all data in descending order according to DATE
    String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
    Uri callUri = Uri.parse("content://call_log/calls");
    Cursor curCallLogs = cr.query(callUri, null, null, null, strOrder);

    return curCallLogs;
}

【问题讨论】:

  • 请添加更多代码 - 2 行不足以让任何人帮助您。描述问题所在。

标签: java android listview android-studio android-fragments


【解决方案1】:

如果你想使用setListAdapter,你的Fragment应该扩展ListFragment。但在您的情况下,将其更改为 mListView.setAdapter([...]) 应该可以解决问题

改变

setListAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1, R.id.tvNameMain, conNames));

mListView.setAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1, R.id.tvNameMain, conNames));

【讨论】:

  • 这是.... ArrayAdapter adapter = new MyAdapter(getActivity().getApplicationContext(), R.layout.liststyle, R.id.tvNameMain, conNames); mListView.setAdapter(适配器);
  • 就我而言,我必须修复它。它到 mListView.setAdapter
  • 什么错误?请让我们理解。错误意味着什么
  • 我编辑改正的方式?评论 1 中的正确或错误
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多