У меня странная проблема. Вот код:

public class TaxiDetails extends Activity{

ArrayList<Bus> listBus = new ArrayList<Bus>();
ArrayList<Taxi> listTaxi = new ArrayList<Taxi>();
TextView detalji, title;
ImageView backBtn;
String strType;
StringBuilder builder = new StringBuilder();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);  
    setContentView(R.layout.numbers_details);
    detalji = (TextView) findViewById(R.id.txtNumbDetails);
    title = (TextView) findViewById(R.id.txtTitleNumbers);
    detalji.setTypeface(Typeface.DEFAULT_BOLD);
    Typeface TF = Typeface.createFromAsset(getAssets(), "fonts/Roboto-Black.ttf");
    backBtn = (ImageView) findViewById(R.id.backBtn);
    title.setTypeface(TF);

    Intent in = getIntent();
    strType = in.getStringExtra("type");

    if  (strType.equals("TAXI")){
        listTaxi = (ArrayList<Taxi>) in.getSerializableExtra("TAXI");
        title.setText("Taxi");
    } else if (strType.equals("BUS")){
        listBus = (ArrayList<Bus>) in.getSerializableExtra("BUS");
        title.setText("BUS");
    }   

    if (listBus != null) {
        for (int i = 0; i < listBus.size(); i++) {
            builder = new StringBuilder();
            String naslov = listBus.get(i).getTitle();
            String opis = listBus.get(i).getDescription();
            builder.append(naslov);
            builder.append("\n");
            builder.append(Html.fromHtml(opis));
            builder.append("\n");
        }
    }

    if (listTaxi != null) {
        for (int i = 0; i < listTaxi.size(); i++) {
            builder = new StringBuilder();
            String naslov = listTaxi.get(i).getTitle();
            String opis = listTaxi.get(i).getDescription();
            builder.append(naslov);
            builder.append("\n");
            builder.append(Html.fromHtml(opis));
            builder.append("\n");
        }
    }

    detalji.setText(builder.toString().trim());
}
}

Я передаю массив из предыдущего действия. Либо массив объектов Такси или Автобус, в зависимости от того, что выбирает пользователь. Однако для такси это работает отлично. Для Bus он показывает только последний объект массива, хотя отладчик показывает, что listBus содержит 2 объекта. Я использую ту же функцию listBus в Google Map, и там она работает для отображения местоположения всех объектов, так почему же она здесь не работает?

2
Tomislav Turcic 4 Июл 2013 в 10:30
1
Я не могу поверить в то, что «Такси отлично работает» ...
 – 
Fildor
4 Июл 2013 в 10:34
@Fildor: если у Taxis всего один объект, он будет работать отлично :)
 – 
Asahi
4 Июл 2013 в 10:55

1 ответ

Лучший ответ

Вы создаете новый StringBuilder на каждой итерации цикла. Это не должно было работать даже для Taxis, поскольку вы делаете там то же самое.

Просто переместите приведенный ниже оператор за пределы цикла for:

builder = new StringBuilder();

Или вам лучше удалить присвоение, поскольку вы уже инициализировали его в объявлении переменной экземпляра. Значит, вам здесь это не нужно.

5
Rohit Jain 4 Июл 2013 в 10:38
1
Думаю лучше вообще удалить. В противном случае второй if все равно заткнет первый.
 – 
Thilo
4 Июл 2013 в 10:34
1
Я думаю, что странным здесь является то, что OP говорит, что это работает для такси.
 – 
Fildor
4 Июл 2013 в 10:36
Я думаю, что знал, я здесь новенький, даже не знал об этой опции.
 – 
Tomislav Turcic
4 Июл 2013 в 11:09