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

时间:2016-01-28 18:26:56

标签: android button android-studio android-arrayadapter

大家好,我很难弄清楚为什么我的按钮不会显示正确的文字并显示垃圾代码。我正在运行一个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

1 个答案:

答案 0 :(得分:1)

我在这段代码中看到3个问题:

第一,我认为java可以搞砸这个1:

替换&GT; final ArrayList list = new ArrayList&lt;&gt;();

与&GT; final ArrayList list = new ArrayList();

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

第3个新的ArrayAdapter()构造函数获取字符串列表。所以,如果你...

替换&GT; final ArrayAdapter adapter = new ArrayAdapter(v.getContext(),android.R.layout.simple_list_item_1,list);

与&GT; final ArrayAdapter adapter = new ArrayAdapter(v.getContext(),android.R.layout.simple_list_item_1,returnedString);

您将看到包含您在循环中打印的文本的按钮。