Добавить TextViews программно - PullRequest
0 голосов
/ 18 марта 2012

У меня есть пустой LinearLayout, и мне нужно добавить к нему динамическое число TextView s.Однако, когда я использую приведенный ниже код, отображается только первый TextView:

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

    String[] listofnumbers = new String[1000];
    for ( int i = 0 ; i < 1000 ; ++i )  {
        listofnumbers[i] = "null";
    }

    Context context = getBaseContext();

    String text = null;

    Uri uri = Uri.parse("content://sms");
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);

    String[] columnNames = cursor.getColumnNames();
    LinearLayout lv = new LinearLayout(context);
    LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, dip(48));

    boolean v = true;
    while (cursor.moveToNext()) 
    {
        String numberString = (cursor.getString( cursor.getColumnIndexOrThrow("address") ) ).replace(" ", "");

        int i = 0;
        boolean numberNotPresent = true;
        for (  ; listofnumbers[i] != "null" ; ++i ) {
            if ( numberString.equals(listofnumbers[i])  )   {
                numberNotPresent = false;
            }
        }
        if ( numberNotPresent == true ) {
            text = (CharSequence) "From: " + cursor.getString(cursor.getColumnIndexOrThrow("address")) + ": " + cursor.getString(cursor.getColumnIndexOrThrow("body"));
            listofnumbers[i] = numberString;
            TextView tv = new TextView(this);
            tv.setText(text);
            tv.setLayoutParams(textViewParams);
            lv.addView( tv );
        }
    }
    setContentView(lv);
}

Где я ошибся?

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

попробуйте изменить эти две строки:

LinearLayout lv = new LinearLayout(context);
    LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, dip(48));

с этими:

LinearLayout lv = new LinearLayout(context);
        lv.setOrientation(LinearLayout.VERTICAL);
        LinearLayout.LayoutParams textViewParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

В основном вам нужно установить ориентацию lv LinearLayout на вертикальную, поскольку по умолчанию она горизонтальная.

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

Я не уверен, но может быть для каждого textView вы устанавливаете параметр fill_parent?1-й текстовый вид отображается на всем вашем макете.

...