Как назначить идентификатор строки для элементов пользовательского интерфейса.
Я занимаюсь разработкой приложения для Android и создаю элементы пользовательского интерфейса в цикле. Но мне нужно, чтобы эти элементы имели идентификатор, например, буквы и цифры. "rl1"
или же "rl2"
, Я пытался использовать метод RelativeLayout.setId()
но этот метод принимает только int
, Есть ли способ, которым я могу установить идентификатор, как я хочу, не ограничиваясь номерами?
Благодарю.
Вот код, который я пытаюсь заставить работать.
for (int i=1; i < 10; i++)
{
//gets the frameview where the elements will be created.
String LinearLayoutId = "frameview1";
int resID = getResources().getIdentifier(LinearLayoutId, "id", "com.myapp.ERS");
LinearLayout linearLayout = (LinearLayout)findViewById(resID);
//creates the RelativeLayout that will hold the ImageIcon and the TextView
RelativeLayout rl = new RelativeLayout(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,40 );
rl.setLayoutParams(lp);
rl.setId("rl"); /// >>>> I would like here to set and ID of "rl1" for example.
rl.setBackgroundDrawable(getResources().getDrawable(R.drawable.bk36));
//creates the image icon within the layout at the left side
ImageView image = new ImageView(this);
lp = new RelativeLayout.LayoutParams(
40,RelativeLayout.LayoutParams.MATCH_PARENT );
image.setLayoutParams(lp);
String imageicon = "icon_"+i;
resID = getResources().getIdentifier(imageicon, "drawable", "com.myapp.ERS");
image.setImageDrawable(getResources().getDrawable(resID)); //sets the icon
rl.addView(image); //adds the ImageView to the relative layout
//creates the TextView within the layout with a 40 margin to the left
TextView tv = new TextView(this);
lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT );
lp.setMargins(40, 0, 0, 0);
tv.setLayoutParams(lp);
String textViewID = "tv"+i;
resID = getResources().getIdentifier(textViewID, "string", "com.myapp.ERS");
tv.setText(getResources().getString(resID));
tv.setTextColor(Color.BLACK);
tv.setTextSize(25);
rl.addView(tv);//adds the TextView to the relative layout
rl.setOnClickListener(mAddListener);
linearLayout.addView(rl);//adds the RelativeLayout to the LinearLayout
}
и тогда у меня есть OnCLickListener, как это...
private OnClickListener mAddListener = new OnClickListener()
{
public void onClick(View v){
Intent intent;
Bundle bundle;
String id = getResources().getResourceEntryName(v.getId());
id = id.replaceAll("\\D+","");
int value = Integer.parseInt(id);
intent = new Intent(ERS.this, ShowInfo.class);
bundle = new Bundle();
bundle.putInt("key", value);
System.out.println(v.getId());
intent.putExtras(bundle);
startActivity(intent);
}
};
Я пытался настроить числовые идентификаторы, но потом, когда я ищу их с помощью:
String id = getResources().getResourceEntryName(v.getId());
Он не может их найти.
У меня было все это в xml
для начала, но он был очень длинным, потому что в списке около сорока элементов, и мне было сложно пойти и изменить букву, например, во всех них. Я пришел с этой идеей, чтобы генерировать их во время выполнения в for loop
, Тем временем я тестирую с десятью, но не могу заставить его работать.
Если я делаю что-то не так, то извините, но я новичок в этом.
2 ответа
Почему бы вам не попробовать использовать SharedPreferences в качестве альтернативы, если вы хотите получить доступ к элементам, которым вы даете какой-то идентификатор в другом месте в какой-либо другой деятельности.
Вам все еще может быть проще вернуться к XML
макеты и использовать R class
генерировать значимые идентификаторы. Хотя, так как вы не включили оригинал xml
файл, на который вы ссылаетесь в конце вопроса, так что я могу только догадываться о проблеме, с которой вы столкнулись. Это, кажется, соответствует всем требованиям, и позволит вам создать что-то вроде:
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/hellotextview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hi there"/>
android:id="@+id/hellotextview"
генерирует идентификатор, который можно использовать в другом месте вашего проекта. В вашем коде Java вы можете получить доступ к этому конкретному TextView
с чем-то похожим на:
TextView helloText = (TextView) findViewById(R.id.hellotextview);
R.id.hellotextview
int автоматически генерируется при сборке проекта (в gen/R.java
), но по мере того, как вы выбираете имя, вы можете назначить им что-то важное для вас и вашего проекта. Поэтому вместо того, чтобы пытаться использовать строковые значения, такие как "rl1"
а также "rl2"
что вы упомянули, вы могли бы использовать R.id.rl1
а также R.id.rl2
,
Помимо отдельных элементов пользовательского интерфейса, вы также можете использовать ту же технику для строк (в res/values/strings.xml
) и другие ресурсы, хранящиеся в рамках проекта res/
папки, такие как значки, мультимедийные файлы и т. д. В случае строк вы можете получить к ним доступ getString(R.string.some_name_given_by_you);
См. Доступ к ресурсам на сайте разработчиков Android для получения дополнительной информации.