Добавление TextViews в конце AsyncTask - PullRequest
0 голосов
/ 22 марта 2012

Мне нужно добавить текст в ScrollableLayout после того, как он удаленно извлечен из AsyncTask. Поскольку я не знаю количество задействованных строк, мне нужно программно создать столько TextView с, сколько необходимо.

Код макета

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_phone_mainView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/view_phone_linearLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="top" >

        <TextView
            android:id="@+id/view_phone_lblTitle"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal|center_vertical"
            android:text="@string/view_phone_title"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/view_phone_lblWarning"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/view_phone_warning"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:visibility="invisible" />

    </LinearLayout>

</ScrollView>

Активность

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        pDialog = new ProgressDialog(this);
        pDialog.setIndeterminate(true);
        pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pDialog.setMessage(getString(R.string.view_phone_wait));

        pDialog.show();

        task = new MessageLoaderTask(); //Returns String[] on callback
        task.execute((Void) null);
    }

    public void onRulesLoaded(String[] messages) { //Directly called by OnPostExecute
        LinearLayout container = (LinearLayout) findViewById(R.id.view_phone_linearLayout);
        if (messages != null) {

            for (String m : messages) {
                TextView tv = new TextView(this);
                tv.setText(m);
                tv.setTextAppearance(this, android.R.attr.textAppearanceSmall);
                tv.setVisibility(View.VISIBLE);
                tv.setBackgroundColor(Color.TRANSPARENT);
                tv.setTextColor(Color.BLACK);

                container.addView(tv, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
            }
        }

        pDialog.dismiss();
    }

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

Я попытался прокрутить и заметил, что область прокрутки очень длинная, совместимая с длинным текстом заглушки Lorem ipsum, который я использовал для тестирования. Если я отсекаю с помощью отладки одну из строк, чтобы очистить (их всего 2), прокручиваемая область короче по высоте. Я использую светлую тему, поэтому я ожидаю черный текст на белом фоне.

tv.setTextAppearance(this, android.R.attr.textAppearanceSmall);
tv.setVisibility(View.VISIBLE);
tv.setBackgroundColor(Color.TRANSPARENT);
tv.setTextColor(Color.BLACK);

были добавлены во второй раз, когда все терпело неудачу. Нет разницы, на месте они или нет. Что я могу сделать, чтобы исправить?

Спасибо

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Не уверен, почему ваш ScrollView будет увеличиваться в длине, если бы это была единственная проблема, но, похоже, вам нужно установить ориентацию LinearLayout на вертикальную.

0 голосов
/ 22 марта 2012

Используйте код ниже.

   <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine" >

        <requestFocus />
    </EditText>

добавить все строки к этому EditText, удерживая '\ n' между строками. Чтобы все было правильно выровнено.

...