Просмотр списка индексов с картой базы данных

Я знаю, что есть много дубликатов с такими проблемами, но просьбы читают мои и помогают мне.

Я очень новичок в разработке под 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()));

}

Ошибки:

Ошибка 1

Ошибка 2

Ошибка 3

Ошибка 4

Если вам потребуется больше кодов, дайте мне знать, и я обновлю этот пост. Заранее спасибо.

2 ответа

Ответьте на ошибки, которые вы получаете:

  1. Ты звонишь dbList.setAdapter(): dbList это не ListView или же RecyclerViewВызовите метод setAdapter() для соответствующего ListView или же RecyclerView переменная.

  2. Вы проходите this в setOnClickListener() метод: this указывает на ваш KnowledgeActivity и не View.OnClickListener, Решение: либо внедрить View.OnClickListener в вашей деятельности или позвоните новый OnClickListener как это,

    textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    }});
    
  3. database.keyword() возвращается List и вы пытаетесь привести его к String[]

Следуйте этой библиотеке для индексации списка нет необходимости писать дополнительную функцию, эта библиотека управляет всем делом

Другие вопросы по тегам