Я хочу дать идентификатор некоторым представлениям (textview, imageview и т. Д.) В макете, который запрограммирован автоматически. Так что лучший способ установить ID.Как установить идентификатор динамически созданного макета?
ответ
Вы создаете файл ids.xml и поместить все необходимые идентификаторы в нем, как показано ниже
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="layout1" />
<item type="id" name="layout2" />
<item type="id" name="layout3" />
</resources>
Теперь для динамически создаваемых макетов или представлений Вы можете использовать эти идентификаторы, как показано ниже
new_layout1.setId(R.id.layout1);
new_view2.setId(R.id.layout2);
new_layout3.setId(R.id.layout3);
Я надеюсь, что это может помочь вам.
int id=100+1;
layout.setId(id);
[Как упоминалось здесь] (http://stackoverflow.com/a/24721203/1221537), это решение будет генерировать ошибку проверки редактора (ожидаемый ресурс идентификатора типа), но он будет скомпилирован просто отлично. – adamdport
На самом деле это не так. Если вы делаете int id = 100.apparently, если вы добавляете числа, он отлично работает. Не получилось, что xD –
/спасибо @MateuszWinnicki, как ни странно, добавление сделало разницу. setId (100) не работает, но setId (99 + 1) действительно работает –
создать папку res/values/ids.xml
и
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="refresh" type="id"/>
<item name="settings" type="id"/>
</resources>
в деятельности вызова класса как этот
ImageView refreshImg = new ImageView(activity);
ImageView settingsImg = new ImageView(activity);
refreshImg.setId(R.id.refresh);
settingsImg .setId(R.id.settings);
Было задано вопрос о ** динамически ** созданном макете. – Arnthor
Как это отличается от принятого ответа? –
вот как ---> создать папку 'res/values / ids.xml' –
Если вы помещаете группу компонентов повторно в макет программно, как показано ниже:
<LinearLayout>
<ImageView>
<TextView>
<Button>
<ImageView>
<TextView>
<Button>
<ImageView>
<TextView>
<Button>
...
</LinearLayout>
то, вы можете использовать цикл и дать идентификаторы соответственно:
for(int i=0;i<totalGroups;i++)
{
ImageView img;
TextView tv;
Button b;
... // set other properties of above components
img.setId(i);
tv.setId(i);
b.setId(i);
... //handle all events on these components here only
... //add all components to your main layout
}
Или, если только один группу компонента, которую вы хотите добавить, вы можете использовать любое целое число, которое является большим и не конфликтует с идентификаторами других компонентов в ресурсах. Это не будет сильно противоречивым.
Как получить значения textview и всех других компонентов? Пожалуйста, уточните подробнее. –
Вы можете определить свои Идентификаторы как ресурсы, а затем использовать setId()
, чтобы установить его. В файле XML, определяет идентификаторы, как:
<resources>
<item type="id">your id name</item>
</resources>
затем, использование в файле Java, как ..
layout.setId(R.id.<your id name>)
Google, наконец, осознал необходимость создания уникальных идентификаторов для программно созданного вида .. .
От уровня API 17 и выше, как только можно назвать View.generateViewId()
Попробуйте этот код! Это должно помочь дать представление.
activity_prac_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="@string/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/display_txt"
android:textStyle="bold"
android:textSize="18sp"
android:textAlignment="center"
android:layout_gravity="center_horizontal"/>
<GridLayout
android:id="@+id/my_grid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:rowCount="4">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/linear_view">
<Button
android:text="@string/button_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_btn"
android:layout_gravity="center_horizontal"/>
<TextView
android:text="@string/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/my_txt"
android:textSize="18sp"
/>
</LinearLayout>
</GridLayout>
</LinearLayout>
вот остальная часть кода
public class AnotherActivity extends AppCompatActivity {
private int count = 1;
List<Integer> gridArray;
private TextView myDisplayText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gridArray = new ArrayList<>();
gridArray.add(Integer.valueOf(1));
setContentView(R.layout.activity_prac_main);
findViews();
}
private void findViews(){
GridLayout gridLayout = (GridLayout)findViewById(R.id.my_grid);
gridLayout.setColumnCount(4);
LinearLayout linearLayout = (LinearLayout) gridLayout.findViewById(R.id.linear_view);
linearLayout.setTag("1");
Button myButton = (Button) linearLayout.findViewById(R.id.my_btn);
myButton.setTag("1");
TextView myText = (TextView) linearLayout.findViewById(R.id.my_txt);
myText.setText("1");
myDisplayText = (TextView) findViewById(R.id.display_txt);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView txt = (TextView) view;
myDisplayText.setText("PRESS " + txt.getTag().toString());
if(count < 24) {
createView();
}
else{
dialogBox();
}
}
});
}
private void createView(){
LinearLayout ll = new LinearLayout(this);
ll.setId(Integer.valueOf(R.id.new_view_id));
ll.setTag(String.valueOf(count+1));
Button newBtn = createButton();
newBtn.setId(Integer.valueOf(R.id.new_btn_id));
newBtn.setTag(String.valueOf(count+1));
TextView txtView = createText();
txtView.setId(Integer.valueOf(R.id.new_txt_id));
txtView.setTag(String.valueOf(count+1));
txtView.setText(String.valueOf(count+1));
GridLayout gridLayout = (GridLayout)findViewById(R.id.my_grid);
ll.addView(newBtn);
ll.addView(txtView);
ll.setOrientation(LinearLayout.VERTICAL);
gridLayout.addView(ll);
count++;
}
private Button createButton(){
Button myBtn = new Button(this);
myBtn.setText(R.string.button_send);
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView txt = (TextView) view;
myDisplayText.setText("PRESS " + txt.getTag().toString());
if(count < 24) {
createView();
}
else{
dialogBox();
}
}
});
return myBtn;
}
public void dialogBox() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("GRID IS FULL!");
alertDialogBuilder.setPositiveButton("DELETE",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
GridLayout gridLayout = (GridLayout)findViewById(R.id.my_grid);
gridLayout.removeAllViews();
count = 0;
createView();
}
});
alertDialogBuilder.setNegativeButton("CANCEL",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
private TextView createText(){
TextView myTxt = new TextView(this);
myTxt.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
return myTxt;
}
}
Как вы можете видеть, идентификаторы были созданы в рес -> значения -> Идентификаторы файлов.
при создании представлений динамический идентификатор одинаковый для представлений.
Каждый TextView имеет один и тот же идентификатор. Каждая кнопка имеет один и тот же идентификатор. каждый макет разделяет один и тот же идентификатор.
Идентификаторы важны только для доступа к содержимому представлений.
Однако тег - это то, что делает каждый вид уникальным для каждого.
Надеюсь, это поможет вам!
- 1. Способы включения динамически созданного макета
- 2. динамически установить положение макета
- 3. Как найти идентификатор динамически созданного jqGrid?
- 4. Как установить атрибуты динамически созданного jquery select2?
- 5. Как установить высоту динамически созданного jpanel?
- 6. MFC - Получите идентификатор динамически созданного прямоугольника
- 7. Не удалось получить идентификатор динамически созданного флажка
- 8. Брус набор идентификатор созданного UserControl динамически
- 9. Как установить маржу макета динамически на андроид
- 10. Как динамически установить параметры макета в Android?
- 11. установить дополнительный класс для динамически созданного div
- 12. Как получить идентификатор динамически созданного веб-элемента управления
- 13. как я могу получить идентификатор динамически созданного checboxa
- 14. Как получить идентификатор динамически созданного флажка javascript jquery
- 15. Удалить дублирующее значение внутри arraylist из динамически созданного макета Android
- 16. Android Установить ширину макета текстового представления динамически
- 17. Как установить идентификатор нового созданного элемента с помощью Knockout
- 18. Изменить динамически созданного CSS
- 19. как установить идентификатор создается динамически текстовое поле в JavaScript
- 20. Использование jQuery динамически созданного ID
- 21. Как установить значение элемента динамически созданного выпадающего списка?
- 22. андроид - как установить TAG для динамически созданного фрагмента
- 23. Как установить цвет фона для динамически созданного представления?
- 24. Как установить значение динамически созданного текстового поля в javascript
- 25. Как установить субъект динамически созданного расширителя в wpf
- 26. Как установить фон динамически созданного экземпляра BufferedImage прозрачным?
- 27. Как установить атрибут name для динамически созданного div? .. в jQuery
- 28. Назначение идентификатора динамически созданного ListFragment
- 29. получить идентификатор и значение динамически созданного элемента jquery
- 30. Как присвоить значение созданного динамически
Неплохо, это работает. Но тем не менее, никогда не бывает хорошего, чтобы не пропустить объявления о кодировке и XML-версии. – Arnthor
@Nordvind Я дал идею абхишеку амета не полное решение. Он не упомянул о любых требованиях к версии для Android. Декларация является основной вещью, поэтому любой разработчик Android напишет в * .xml-файле. ** Я сказал, что он будет работать во всех версиях android ?? ** Что не так с моим кодом? Если у вас есть одно и то же требование, вы используете мой ответ и у вас возникли проблемы, спросите меня, не комментируйте это. –
@ Nordvind с другим примером того, как бесполезная система голосования SO. Слишком плохо, что нет возможности скомпенсировать комментарии. –