#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