2014-02-03 4 views
0

У меня есть LinearLayout, который динамически объявляется через Run_Time, хотя у меня нет фиксированных имен или тегов для определения этого макета, хотя я пытался назначить тег для wach. Макет зависит от некоторой переменной и извлекает ее с помощью этой переменной позже, как это:Как назначить динамический тег?

layout.setTag(index , "something"); // "index" is a variable it's value obtained through the run_time 

, но я получил эту ошибку:

ERROR/AndroidRuntime(643): Caused by: java.lang.IllegalArgumentException: The key must be an application-specific resource id. 

и после поиска я обнаружил, что проблема заключается в том, что я должен назначить фиксированный ресурс для этого тега, но тогда я не буду уметь различать разные макеты, так есть ли способ достичь моего подхода?

ответ

0

Причина, по которой вы не можете использовать setTag (int, Object), заключается в том, что для андроида требуется запрос на компилируемый уникальный идентификатор в аргументе 'int'.

один способ:

объявить тег в строки файла, как следующие:

<string name="FirstTag">1</string> 
<string name="SecondTag">2</string> 

и для установки, что использование:

layout.setTag(R.string.FirstTag, "something"); 

и для получения значения:

layout.getTag(R.string.FirstTag).toString(); 

другой способ создать новый файл с именем значения/tags.xml и записи:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item name="FirstTag" type="id">1</item> 
</resources> 

ИЛИ вы можете использовать R.id.* в качестве тегов Id тоже, я думаю, вы можете справиться с вашей проблемой с этим

+0

Может быть, стоит отметить, что он не должен быть 'String', но любой ресурс ID – CodingIntrigue

+0

да вы правы, я просто привел один пример –

+0

, это то, что я хочу избежать, поскольку я упомянул, что хочу, чтобы он был объявлен из переменной, полученной через h run_time – MRefaat

0

Проверьте это: (использование тегов)

Java код:

public class DynamicTetView extends Activity 
{ 
    RelativeLayout rl1; 
    Button b1; 
    TextView txt,txt3; 
    int i = 0; 
    HashMap<String, Integer> map = new HashMap<String, Integer>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dynamic_tet_view); 

     rl1 = (RelativeLayout)findViewById(R.id.rl1); 
     b1 = (Button)findViewById(R.id.button1); 

     RelativeLayout.LayoutParams param2 = new RelativeLayout. 
       LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 
     param2.setMargins(5, 0, 0, 5); 
     txt3 = new TextView(this); 
     txt3.setId(500); 
     Log.d("Id of txt3........", ""+txt3.getId()); 
     txt3.setText("Hii"); 
     rl1.addView(txt3, param2); 

     for(i=0;i<10;i++) 
     { 
      RelativeLayout.LayoutParams param = new RelativeLayout. 
        LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
          RelativeLayout.LayoutParams.WRAP_CONTENT); 
      param.setMargins(5, 0, 0, 5); 
      txt = new TextView(this); 
      txt.setId(i+1); 
    txt.setTag(i+1); 
  Log.d("Id........", ""+txt.getId()); 

      map.put("hi"+txt.getId(), i); 

      if(txt.getId()!=1) 
      { 
       param.addRule(RelativeLayout.BELOW,(txt.getId()-1)); 
      } 
      else 
      { 
       param.addRule(RelativeLayout.BELOW,txt3.getId()); 
      } 
      txt.setText("Text"+(i+1)); 
      rl1.addView(txt,param); 

      txt.setOnClickListener(new OnClickListener() 
      { 

       @Override 
       public void onClick(View v) 
       { 
        // TODO Auto-generated method stub 

        String tag = v.getTag().toString();     

        Toast.makeText(getBaseContext(),"You clicked "+tag, Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } 

     b1.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View arg0) 
      { 
       // TODO Auto-generated method stub 
       rl1.removeAllViews(); 
      } 
     }); 

    } 


} 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".DynamicTetView" > 

    <RelativeLayout 
     android:id="@+id/rl1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="48dp" 
      android:text="Clear" /> 
    </RelativeLayout> 

</RelativeLayout> 
+0

Просто добавьте выше Java File & XML в свой проект, после чего вы получите представление о том, как работает Tag. –

+0

о 'setTag (object)' и я спрашиваю о 'setTag (key, Object)' – MRefaat

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