繁体   English   中英

将不同的ID分配给同一视图

[英]Assign different ids to the same view

一种父级线性布局会被放大,并且子视图会添加到for循环中。 但是所有子视图都具有相同的ID。 我可以通过v.getId()找到ID,然后将ID硬编码到case "id of child view"case "id of child view" 但是ID可能会在另一部手机上更改。
在我的情况下,所有ID都相同,因此手动设置它们也可能是不好的做法。 我想通过onClick(View v) -Method调用子视图,但是无法正确获取ID。
我添加了一个树视图作为插图: 树视图布局

@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
            }
        }
    }

如何使用childview的setTag和getTag方法?

然后,您可以检查getTag ==第一个孩子,并根据您的逻辑进行编码。

在for循环中,您可以使用带有i变量的setTag来设置标签。

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: { ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM