Просмотр списка индексов с картой базы данных
Я знаю, что есть много дубликатов с такими проблемами, но просьбы читают мои и помогают мне.
Я очень новичок в разработке под Android, поэтому я кодировал их своими собственными инстинктами и ограниченным количеством доступных руководств.
Я хотел бы реализовать индексируемую (AZ) боковую панель, как в контактах. Все доступные сообщения являются строками массива с жестко запрограммированными записями, но мои нет, я использую DB Browser для SQLite, а затем заполняю все данные в просмотре карты.
Я ссылался на ( https://github.com/woozzu/IndexableListView/blob/master/src/com/woozzu/android/widget/IndexableListView.java) и пробовал все упомянутые решения, связанные с этим постом, но безрезультатно. Я считаю, что я просто закодировал это неправильно, поскольку записи жестко закодированы, а мои нет.
В настоящее время я следую этому руководству ( http://androidopentutorials.com/android-listview-with-alphabetical-side-index/) и исправил некоторые коды здесь и там, которые, по моему мнению, необходимы для моей ситуации, такие как добавление моего База данных в массив. Тем не менее, есть несколько ошибок, и я не знаю, что делать.
Таким образом, я понятия не имею, как решить эти ошибки дальше. Пожалуйста, помогите мне и предоставьте мне, возможно, пошаговое руководство или даже лучшие видеогиды, чтобы я мог выполнить их.
Вот что я пробовал:
декларация
//indexable list view
Map<String, Integer> mapIndex;
List<String> dbList = new ArrayList<>();
OnCreate
//indexable list view
String[] dbList= database.getKeyword();
Arrays.asList(dbList);
dbList.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1, dbList));
etIndexList(dbList);
displayIndex();
//indexable list view
private void getIndexList(String[] dbList){
mapIndex = new LinkedHashMap<String, Integer>();
for(int i = 0; i < dbList.length; i++){
String db = dbList[i];
String index = db.substring(0,1);
if(mapIndex.get(index) == null)
mapIndex.put(index, i);
}
}
private void displayIndex(){
LinearLayout indexLayout = (LinearLayout) findViewById(R.id.side_index);
TextView textView;
List<String> dbList = new ArrayList<String>(mapIndex.keySet());
for (String index : dbList){
textView = (TextView) getLayoutInflater().inflate(R.layout.side_index_item, null);
textView.setText(index);
textView.setOnClickListener(this);
indexLayout.addView(textView);
}
}
public void onClick(View view){
TextView selectedIndex = (TextView) view;
dbList.setSelection(mapIndex.get(selectedIndex.getText()));
}
Ошибки:
Если вам потребуется больше кодов, дайте мне знать, и я обновлю этот пост. Заранее спасибо.
2 ответа
Ответьте на ошибки, которые вы получаете:
Ты звонишь
dbList.setAdapter()
:dbList
это неListView
или жеRecyclerView
Вызовите метод setAdapter() для соответствующегоListView
или жеRecyclerView
переменная.Вы проходите
this
вsetOnClickListener()
метод:this
указывает на вашKnowledgeActivity
и неView.OnClickListener
, Решение: либо внедритьView.OnClickListener
в вашей деятельности или позвоните новыйOnClickListener
как это,textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { }});
database.keyword()
возвращаетсяList
и вы пытаетесь привести его кString[]
Следуйте этой библиотеке для индексации списка нет необходимости писать дополнительную функцию, эта библиотека управляет всем делом