Как отобразить журнал вызовов в ListView на фрагменте?

#java #android #listview #android-studio #android-fragments

#java #Android #listview #android-studio #android-фрагменты

Вопрос:

Мне нужно отобразить журнал вызовов в 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;
}
  

Class MyAdapter

     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;
}
  

Комментарии:

1. Пожалуйста, добавьте больше кода — 2 строк недостаточно для того, чтобы кто-либо мог вам помочь. Опишите, что не так.

Ответ №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));
  

Комментарии:

1. Это …. ArrayAdapter<Строка> адаптер = новый MyAdapter(getActivity().getApplicationContext(), R.макет. liststyle, R.id.tvNameMain, conNames); mListView.setAdapter(адаптер);

2. в моем случае я должен это исправить. это в mListView.setAdapter << ошибка it

3. Какая ошибка? Пожалуйста, дайте нам понять. Ошибка ничего не значит

4. Как я редактирую, чтобы исправить? Это правда или неправильно в комментарии 1