带有数据库cardview的索引列表视图

时间:2018-11-14 07:08:14

标签: java android arraylist android-arrayadapter db-browser-sqlite

我知道有很多类似问题的重复,但请阅读我的帮助我。

我对Android开发非常陌生,因此我用自己的直觉和可用的指南编写了代码。

我想像在联系人中一样实现可索引的(A-Z)侧面板。所有可用的帖子都是带有硬编码条目的数组字符串,但我的不是,我正在使用DB Browser for SQLite,然后在cardview中填充每个数据。

我已参考(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()));

}

错误是:

Error 1

Error 2

Error 3

Error 4

如果您需要更多代码,请告诉我,我将更新此帖子。预先谢谢你。

2 个答案:

答案 0 :(得分:0)

遵循此lib获取索引列表,无需为此lib处理所有情况编写额外的功能

答案 1 :(得分:0)

回答您遇到的错误:

  1. 您正在呼叫dbList.setAdapter()dbList不是ListViewRecyclerView 在适当的ListViewRecyclerView变量上调用setAdapter()方法。

  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[]