2015-12-12 2 views
0

Один родительский линейный макет завышен, а дочерние представления добавляются в цикл for. Но все дочерние представления имеют одинаковый идентификатор. Я мог найти id на v.getId(), а затем hardcode id в case "id of child view". Но идентификатор может измениться на другом телефоне.
В моем случае все идентификаторы одинаковы, и их вручную установить, вероятно, также плохо. Я хочу вызвать child-views с помощью метода onClick(View v) -Method, но не могу получить идентификатор справа.
Я добавил древовидный для иллюстрации: tree view layoutНазначение различных идентификаторов для одного и того же вида

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     // extending existing parent class' methods 
     super.onCreate(savedInstanceState); 
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.mainbase, null); 
     for (int i = 0; i < 4; i++) { 
      View custom = inflater.inflate(R.layout.identifierplate, null); 
      switch (i) { 
       case 0: { 
        //set layout images and text for first <include> 
        ImageView SensorReadout = (ImageView) custom.findViewById(R.id.sensor_icon); 
        SensorReadout.setImageResource(R.drawable.ic_launcher); 
        TextView sensor_name = (TextView) custom.findViewById(R.id.sensor_name); 
        sensor_name.setText(R.string.sr_1); 
        TextView sensor_description = (TextView) custom.findViewById(R.id.sensor_description); 
        sensor_description.setText(R.string.sr_2); 
        custom.setOnClickListener(this); 
        parent.addView(custom); 
        break; 
       } 
       case 1: { 
        // do same as in case 0 but different text/image 
        custom.setOnClickListener(this); 
        parent.addView(custom); 
        break; 
       }  
       default: { // Defaults are already set in the XML      
       } 
      } 
     } 
     setContentView(parent); 
    } 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case 0: { 
       Intent intent = new Intent(this, First.class); 
       startActivity(intent); 
       break; 
      } 
      case 1: { 
       Intent intent = new Intent(this, Second.class); 
       startActivity(intent); 
       break; 
      } 
      default: { 
       int id = v.getId(); 
       String ids = String.valueOf(id); 
       Toast.makeText(this, ids, Toast.LENGTH_SHORT).show(); //error: all have same id 
      } 
     } 
    } 
+0

Использование Listview, gridview или Expandable Listview. – HourGlass

+0

Является ли 'custom.setId (i);' не работает для вас? –

ответ

0

Mike M. указал мне в правильном направлении я добавил к .Java:

custom.setId(R.id.id_v_2); 

добавлен в ids.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item 
     type="id" 
     name="id_v_0" /> 
    <item 
     type="id" 
     name="id_v_1" /> 
</resources> 

изменил OnClick()

public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.id_v_0: { ... 
0

Как об использовании SetTag и GetTag метода childview?

Затем вы можете проверить, есть ли getTag == первый ребенок и в соответствии с вашей логикой.

В цикле for вы можете установить тег, используя setTag с переменной i.

+0

хорошая идея, но я действительно придерживался идентификаторов, неспособен. я не могу поддержать ваш ответ :( – ItsmeJulian

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