2015-09-04 5 views
3

В моем проекте у меня есть 80 TextViews. Я должен установить свой текст от 1 до 80 после запуска проекта, и в будущем их не нужно менять. За исключением TxtViews, у меня есть некоторые другие вещи в моем макете, TextViews находятся под ImageViews. на самом деле у меня есть 80 обращений к изображениям и под ними 80 TextViews. Я хочу, чтобы текст textViews был от 1 до 80 динамически. Я знаю, что могу сделать это в моем layout.xml, , но его действительно много времени. есть ли способ сделать это по коду? например, для цикла или что-то в этом роде?Настройка текста TextView

+0

u можете использовать для петли? или отправить ur код, как u hv done – KOTIOS

+1

У вашего 'TextView' есть идентификаторы? Если они это сделают, вы можете это сделать. Но имейте в виду, что для вызова 'findViewById (id)' потребуется много раз, и эта операция очень трудоемка. Пожалуйста, пересмотреть настройку значений в XML. –

+0

Вы должны написать отдельную простую программу для генерации файла layout.xml –

ответ

0

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

http://www.mkyong.com/android/android-listview-example/

+0

Дорогой Трагалун, я не хочу писать цифры от 1 до 80. Таким образом, я должен сделать то же самое. –

+0

Вы также можете написать свой массив из цикла: string [] testArray = новая строка [80]; для (int i = 1; i Tragalunas

+0

Исправления для вышеуказанного кода: String [] testArray = new String [80]; \t \t для (INT I = 0; г Tragalunas

0

Если TextView s объявлены на XML, обернуть их на другой точке зрения, так что вы можете ссылаться на него в коде Java позже, а затем просто использовать for.

Что-то вроде:

View view = findViewById(R.id.your_wrapper); 

for(int i=0; i<((ViewGroup)view).getChildCount(); i++) { 
    View nChild = ((ViewGroup)view).getChildAt(i); 
    TextView tv = (TextView) nChild; 
    tv.setText(String.valueOf(i + 1)); 
} 

Если нет, то вы можете просто создать их динамически внутри кода Java, и добавить их в макет, как LinearLayout.

Пример:

XML

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"  
    android:id="@+id/linear" 
/> 

Java код

LinearLayout ll = (LinearLayout) findViewById(R.id.linear); 

for (int i = 1; i <= 80; i++) { 
    TextView tv = new TextView(this); // Assuming you're inside an Activity. 
    int count = ll.getChildCount(); 
    tv.setText(String.valueOf(i)); 

    ll.addView(tv, count, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
} 

EDIT: Но действительно, вы должны у se RecyclerView или ListView для этого, если ваши значения не будут изменены.

Вы можете узнать больше о RecyclerViewhere, а также о ListViewhere.


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

1

Создать ViewGroup подходящий для ваших нужд в макете, например:

<LinearLayout 
    android:id="@+id/linear_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
/> 

Затем вы создаете вас TextView экземпляров программно, и добавить их к LinearLayout, как это:

LinearLayout layout = (LinearLayout)findViewById(R.id.linear_layout); 

    for(int i = 0; i < 80; i++) { 
     TextView textView = new TextView(getContext()); 
     textView.setText("text" + i); 
     layout.addView(textView); 
    } 

При желании вы можете добавить теги или что-то еще, чтобы найти их снова. Альтернативно просто перебирайте подматрицы макетов.

+0

За исключением TxtViews, у меня есть некоторые другие вещи в моем коде, поэтому я не могу использовать это, я думаю. –

+0

Ну, это гораздо более удобное решение, каковы ваши ограничения? – Kenneth

+0

TextViews находятся под ImageViews. на самом деле у меня есть 80 изображений, которые видят под ними 80 TextViews. Я хочу, чтобы текст textViews был от 1 до 80 динамически. –

1

Если вы знаете, что исправлено 80 Textview, тогда вы должны взять список для этого.

ListView Benefit

  • Управление памятью автоматически
  • ListView управления индексирование
0

заказ в приведенном ниже примере,

public class MainActivity extends Activity { 

LinearLayout linearLayout ; 
ScrollView scrollView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    scrollView = (HorizontalScrollView) findViewById(R.id.scrollViewActivityMain); 
} 

private void populateTextViews() { 

    linearLayout = new LinearLayout(this); 
    linearLayout.setOrientation(LinearLayout.HORIZONTAL); 

    //add all textViews here 
    for(int i=0; i < 80; i++){ 
     TextView myTextView = new TextView(this); 
     myTextView.setText("My TextView "+i); 
     myTextView.setGravity(Gravity.CENTER); 
     linearLayout.addView(myTextView); 
    } 

    scrollView.addView(linearLayout); 
} 
} 

Не забудьте положить, что Scrollview в ваш xml. Дайте мне знать, если это сработает для вас ...

+0

За исключением TxtViews, у меня есть некоторые другие вещи в моем коде, TextViews находятся под ImageViews. на самом деле у меня есть 80 изображений, которые видят под ними 80 TextViews. Я хочу, чтобы текст textViews был от 1 до 80 динамически. –

+0

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

+0

. Заполните эту ссылку, я уверен, что это то, что вы ищете ... Http: //www.mkyong.com/android/android-listview-example/ –

Смежные вопросы