我知道有很多类似问题的重复,但请阅读我的帮助我。
我对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()));
}
错误是:
如果您需要更多代码,请告诉我,我将更新此帖子。预先谢谢你。
答案 0 :(得分:0)
答案 1 :(得分:0)
回答您遇到的错误:
您正在呼叫dbList.setAdapter()
:dbList
不是ListView
或RecyclerView
在适当的ListView
或RecyclerView
变量上调用setAdapter()方法。
您正在将this
传递给setOnClickListener()
方法:this
指向您的KnowledgeActivity
,而不是View.OnClickListener
。
解决方案:在您的活动中实施View.OnClickListener
或像这样调用新的OnClickListener
,
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}});
database.keyword()
返回List
,而您正尝试将其强制转换为String[]