Как назначить идентификатор строки для элементов пользовательского интерфейса.

Я занимаюсь разработкой приложения для 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 для получения дополнительной информации.

Другие вопросы по тегам