2012-06-15 2 views
3

Я разрабатываю приложение на андроиде, и я генерирую элементы пользовательского интерфейса в цикле. Но мне нужны эти элементы, чтобы иметь идентификатор с буквами и цифрами, например "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, но это было очень долго, потому что в списке было около 40 наименований, и мне было сложно сменить письмо, например, во всех из них , Я придумал эту идею, чтобы сгенерировать их во время выполнения в for loop. Тем временем я тестирую десять, но я не могу заставить его работать.

Если я делаю что-то неправильное, то прошу прощения, но я новичок в этом.

ответ

-2

Почему вы не пытаетесь использовать SharedPreferences в качестве альтернативы в случае, если вы хотите получить доступ к элементам, которые вы укажете в другом месте в какой-либо другой деятельности.

+0

Я новичок в этом, и я не знаю, что вы подразумеваете под SharedPreferences – jorgerodriguezhn

+0

. Посмотрите эту ссылку о том, как его использовать: http://developer.android.com/guide/topics/data/data-storage. html # pref –

+0

@jerisalan, если вы просматриваете код, генерируемые элементы - это макеты, ImageViews и другие элементы пользовательского интерфейса. Я не думаю, что SharedPreferences - это действительно способ пойти для хранения идентификаторов для них. – Chilledrat

0

Возможно, вам все же легче вернуться к 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);

См. Accessing Resources на сайте разработчиков Android для получения дополнительной информации.

+0

Дело в том, что когда я устанавливаю onclicklistener, внутри метода, я получаю идентификатор текстового просмотра, который был нажат, а затем я вызываю действие с веб-представлением и в зависимости от идентификатора текстового просмотра, которое было нажато, It загрузит определенный локальный html-файл, относящийся только к определенному текстовому виду. Таким образом, именно поэтому я пытался установитьID всякий раз, когда я генерировал текстовое представление во время выполнения. То, что я закончил, - это просто установить Id на 1, 2, 3, 4, а затем просто отправить этот идентификатор в веб-представление. Я не знаю, если это имеет смысл, но это сработало. – jorgerodriguezhn

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