首页 > 解决方案 > 努力用从数据库填充的 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);
}

标签: androidspinnerandroid-arrayadapterandroid-buttonandroid-adapterview

解决方案


简要地

  • 为按钮创建了 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>

推荐阅读