添加一组按钮到ListView,然后设置适配器和设置按钮文本

Adding a set of buttons to ListView and then setting adapter and setting button texts

大家好,我很难弄清楚为什么我的按钮无法显示正确的文本并显示垃圾代码。我是 运行 一个 serverRequest,然后在获取详细信息后创建按钮,我确实进行了测试,我从服务器返回了正确的字符串。

public void getCourses(User user) {
    ServerRequest serverRequest = new ServerRequest(this);
    serverRequest.fetchUserCoursesDataInBackground(user, new getUserCallback() {
        @Override
        public void doneString(String[] returnedString) {
            if (returnedString == null) {
                System.out.println("DONE EMPTY");
            } else {
                userLocalStore.storeUserCourses(returnedString);
                final ListView listView = (ListView) findViewById(R.id.viewCourseList);
                final ArrayList<Button> list = new ArrayList<>();
                View v = getWindow().getDecorView();

                for (int i = 0; i < returnedString.length; i++) {
                    System.out.println("This is in for loop:" +returnedString[i]);
                    Button button = new Button(v.getContext());
                    button.setText(returnedString[i]);
                    button.setId(i);
                    button.setHeight(40);
                    button.setWidth(100);
                    list.add(button);
                }
                if (list.isEmpty()) {
                    System.out.println("List is empty bro");
                } else {
                    final ArrayAdapter adapter = new ArrayAdapter(v.getContext(), android.R.layout.simple_list_item_1, list);
                    listView.setAdapter(adapter);
                    System.out.println("Adding adapter");
                }
            }
        }

这是完整的代码。我将向您展示它在应用程序上显示的内容

this is the bug

我发现这段代码有 3 个问题:

1st 我假设 java 可以搞砸这 1:

replace> final ArrayList list = new ArrayList<>();

with> final ArrayList list = new ArrayList();

2nd 您正在为 ArrayAdapter 使用布局 "android.R.layout.simple_list_item_1",这是一个包含文本视图的 xml 布局,因此您的屏幕截图显示了 2 个文本视图而不是按钮。

第三个新的 ArrayAdapter() 构造函数采用字符串列表。所以如果你...

replace> final ArrayAdapter 适配器 = new ArrayAdapter(v.getContext(), android.R.layout.simple_list_item_1, list);

with> final ArrayAdapter adapter = new ArrayAdapter(v.getContext(), android.R.layout.simple_list_item_1, returnedString);

您将在循环中看到带有您正在打印的文本的按钮。