Один родительский линейный макет завышен, а дочерние представления добавляются в цикл 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
}
}
}
Использование Listview, gridview или Expandable Listview. – HourGlass
Является ли 'custom.setId (i);' не работает для вас? –