【问题标题】:Replace spinner with dynamically added N number of buttons用动态添加的 N 个按钮替换微调器
【发布时间】:2018-10-23 13:20:34
【问题描述】:

试图用从数据库中动态填充的按钮替换微调器。 通常微调器使用数组适配器和内置列表项布局“android.R.layout.simple_spinner_item”等。如果要填充按钮而不是微调器,应该如何修改?

如何在 startQuiz() 方法 Spinner spinnerDifficulty.getSelectedItem();可以用按钮索引代替吗?

这里是如何与 SPINNER 一起工作的

@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);
}

修改完成,到目前为止...

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();
            }
        });
        QuizListLayout.addView(levelButton);
    }
}

//startQuiz still same
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();
    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>

【问题讨论】:

标签: android android-arrayadapter android-spinner android-button


【解决方案1】:

您可以将按钮动态添加到您的布局中,只需在您想要添加按钮的 XML 文件中添加 linearLayout。

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

创建一个LinearLyout的变量

LinearLayout layoutForButtons;
......
......

现在初始化 oncreate 中的变量

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_starting_screen);

 layoutForButtons = findViewById(R.id.layoutForButtons);
  .....
addingButtonsDynamically(numberOfButtons);

 }

public void addingButtonsDynamically(int numberOfButtons){

 // for adding n number of buttons 
 for(int i=0; i<numberOfButtons;i++){

    Button buttton=new Button(this);
    button.setText("Button" + i);
    button.setId(i);
    button.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


    // adding button to layout 
    layoutForButtons.addView(button);

 }

 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多