Создать макет Android с кнопками из ответа сервера

Я проверил и никогда не мог найти что-то, что помогло бы мне в том, чего я пытаюсь достичь. В моем приложении для Android я хочу иметь возможность сделать запрос на сервер для некоторых данных, когда эти данные будут возвращены, я хочу заполнить прокрутку, потому что слишком много, чтобы поместиться на одном дисплее. Причина, по которой я это делаю, заключается в том, что данные будут обновляться слишком часто, чтобы я мог постоянно обновлять приложение (воображаемый твиттер). Я уже построил линейный макет XML, который будет заполнять представление прокрутки. Мне просто нужно найти лучший способ построения представления.

Я обдумал несколько методов, которые это могло бы быть возможным, и я обращаюсь к тому, который был бы наиболее практичным, если это возможно.

  1. Передача данных в виде XML-потока — я чувствую, что это позволит мне просмотреть все данные, поступающие с сервера, и с помощью тегов XML извлечь содержимое и поместить его в соответствующее место в макете. Затем создайте следующий макет и идите оттуда.

  2. Передача полного макета XML с сервера. Это может создать макет, но я чувствую, что это помешает мне создать кнопки на макете, которые будут запускать настройку onclick, поскольку я передаю все данные. Я знаю, что есть анонимные слушатели, которые могли бы выполнить эту работу, но я не совсем уверен, как я могу заставить его срабатывать в этом случае.

У меня был третий, но он ускользнул от меня в это время. Любая помощь приветствуется.


person TheHamstring    schedule 28.02.2013    source источник


Ответы (2)


попробуй это,

 public void listButtons() {
                  LinearLayout layout = (LinearLayout)findViewById(R.id.button_list);
            String http_url = "http://example.com/demo";
             try {

                 URL url = new URL(http_url);
                 HttpURLConnection con = HttpURLConnection)url.openConnection();

                 if(con!=null){
                     BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                     String data=br.readLine();
                       JSONArray jsonArray=null;
                        jsonArray = new JSONArray(data);
                        Button tv[] = new Button[jsonArray.length()];
                        for(int i=0;i<jsonArray.length();i++)
                        {
                            tv[i] = new Button(this);

                            tv[i].setText(jsonArray.getJSONObject(i).getString("name"));

                            tv[i].setGravity(Gravity.CENTER_HORIZONTAL);

                             tv[i].setOnClickListener(new View.OnClickListener() {

                                    @Override
                                    public void onClick(View v) {
                            //add your code here 
                                    }
                                });
                             layout.addView(tv[i]);

                        }
                }


              } catch (MalformedURLException e) {
                 e.printStackTrace();
              } catch (IOException e) {
                 e.printStackTrace();

              } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }

Я создал XML-файл макета, в который я добавил linearlayout с идентификатором button_list.

файл main.xml-

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"

    tools:context=".ResearchActivity" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="55dp"
        android:orientation="vertical"
        android:id="@+id/button_list"
         >

    </LinearLayout>

</LinearLayout>
person Ajit    schedule 28.02.2013
comment
Где я использую tv[i].setText(jsonArray.getJSONObject(i).getString(name)); это извлечение из XML-канала для получения результатов? - person TheHamstring; 28.02.2013
comment
В моем примере я устанавливаю имя для кнопок из данных JSON, которые возвращаются из приведенного выше URL-адреса... вы можете проанализировать свой канал XML и установить любой текст для этих кнопок. - person Ajit; 01.03.2013
comment
Когда я размещаю первое создание кнопки, я получаю предупреждение. Левая часть аргумента должна быть переменной. Button Purch[] = new Button[tokens.length(); я++]; но токены - это моя переменная, из которой я считываю данные позже, чтобы заполнить мое представление списка. Также я хочу настроить таргетинг на кнопку, которая уже существует в моем макете, будет ли эта кнопка нацеливаться автоматически или мне нужно каким-то образом указать ее. - person TheHamstring; 29.03.2013

Извините, что так долго не отвечал, я был занят другими делами и не мог кодировать. Это было действительно хорошо, но только если я создаю кнопку по мере продвижения. Поскольку я раздуваю макет, мне нужно выбрать уже существующую кнопку, выбрав ее как таковую.

Кнопка thisbutton = (Кнопка)findViewById(R.id.buttonid);

После этого я могу создать onclicklistener, а затем добавить новое представление в макет. Спасибо за помощь! Ваш скрипт указал правильное направление, чтобы определить, что нужно сделать.!

person TheHamstring    schedule 11.04.2013