android - 努力用从数据库填充的 BUTTONS 替换 SPINNER
问题描述
试图用从数据库动态填充的按钮替换微调器。通常微调器使用数组适配器和内置列表项布局“android.R.layout.simple_spinner_item”等。
如果要填充按钮而不是微调器,应该如何修改它?
我应该用按钮布局替换 loadDifficulties() 方法中微调器的布局吗?
在这里它是如何与微调器一起工作的
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starting_screen);
spinnerDifficulty = findViewById(R.id.spinner_quizlist);
loadDifficulties();
Button startTest = findViewById(R.id.start_test);
startTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startQuiz();
}
});
}
private void startQuiz() {
ListQuiz selectedLevel = (ListQuiz) spinnerDifficulty.getSelectedItem();
int LevelListID = selectedLevel.getId();
String quizListName = selectedLevel.getName();
Intent intent = new Intent(StartingScreenActivity.this, MainActivity.class);
intent.putExtra(EXTRA_DIFFICULTY_ID, LevelListID);
intent.putExtra(EXTRA_DIFFICULTY_NAME, quizListName);
startActivityForResult(intent, REQUEST_CODE_QUIZ);
}
private void loadDifficulties(){
QuizDbHelper dbHelper = QuizDbHelper.getInstance(this);
List<ListQuiz> LevelList = dbHelper.getAllListQuiz();
ArrayAdapter<ListQuiz> adapterLevelList = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, LevelList); adapterLevelList.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerDifficulty.setAdapter(adapterLevelList);
}
解决方案
简要地
- 为按钮创建了 LinearLayout。
- 我不再需要在 loadDifficulties 中使用 ArrayAdapter。
将所有需要的参数添加到 startQuiz() (在我的情况下为 int & String),仅将方法简化为 Intents。
private ArrayAdapter <ListQuiz> adapter; private Button autobutton; public int categorySize; private List<ListQuiz> categoryName; private LinearLayout QuizListLayout; private Button levelButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_starting_screen); autobutton = findViewById(R.id.autobutton); loadDifficulties(); QuizListLayout = findViewById(R.id.layoutForButtons); for(int i=0; i<categorySize;i++){ levelButton =new Button(this); levelButton.setText("" + categoryName.get(i)); levelButton.setId(i); final int index = i; levelButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); levelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startQuiz(v.getId(), categoryName.get(index).toString()); } }); QuizListLayout.addView(levelButton); } } private void startQuiz(int LevelListID, String quizListName) { Intent intent = new Intent(StartingScreenActivity.this, MainActivity.class); intent.putExtra(EXTRA_DIFFICULTY_ID, LevelListID); intent.putExtra(EXTRA_DIFFICULTY_NAME, quizListName); startActivityForResult(intent, REQUEST_CODE_QUIZ); } private void loadDifficulties(){ QuizDbHelper dbHelper = QuizDbHelper.getInstance(this); List<ListQuiz> LevelList = dbHelper.getAllListQuiz(); categorySize = dbHelper.getAllListQuiz().size(); categoryName = dbHelper.getAllListQuiz();
按钮布局.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/layoutForButtons">
</LinearLayout>
推荐阅读
- sql - Oracle SQL:将家谱数据按顺序汇总
- weed-fs - 卷数是什么意思?
- javascript - 如何在字典中打印以及 JS 中的这种结构是什么?
- python - 如何将数字添加到字符串中以进行循环
- html - 如何将输入与多行文本的顶部对齐?
- c++ - 如何在数组或链表中查找特定字符串
- r - 是否可以从 R 中的 `tuneR::Wave` 对象写入 mp3 文件?
- powershell - 由 powershell 脚本启动的外部命令是作为后台进程同步运行还是异步运行?
- python - 使用 re 检查元素是否存在于列表中
- json - 如何处理这个错误?json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)