将任何唯一标识符分配给展开视图中的元素

android layout-inflater

64 观看

2回复

0 作者的声誉

我想知道是否可以为展开视图内的元素分配任何唯一的数字。

我的视图如下所示,此图像可能使您了解我正在尝试执行的操作:

在此处输入图片说明

我要做的是根据如下选择的微调器项更改编辑文本框的值:

//spinnerPlanItinerary is the first spinner
    spinnerPlanItinerary.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                List<Town> listOfTowns = new ArrayList<Town>();
                ArrayAdapter<Town> townplanitineraryadapter2 = new ArrayAdapter<Town>(this,
                        android.R.layout.simple_dropdown_item_1line, listOfTowns);
                townplanitineraryadapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinnerTown.setAdapter(townplanitineraryadapter2);
                spinnerTown.setText(""); //second spinner in the view
                edBelt.setText(""); //first edit text in the view
                edStrata.setText(""); //second edit text in the view

                townplanitineraryadapter2.notifyDataSetChanged();
            }
        });

我无法为元素提供任何唯一的ID,因为它们在我的布局文件中已经具有ID。我也一直在使用setTag()getTag()但是getTag()什么也没给我。

另请注意,按一下这样的按钮后,卡片视图就会膨胀:

final LinearLayout itineraryDetailLL = (LinearLayout) findViewById(R.id.itineraryDetailLinearlayout);

        final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
        itineraryDetailLL.addView(childView);
作者: user2253883 的来源 发布者: 2017 年 9 月 15 日

回应 2


0

412 作者的声誉

如果要更改EditText的值,则不需要为此的唯一标识符。你可以这样做:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

       public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub

        if (spinner.getSelectedItem().toString().equals("someSpinnerData")) {
                  editText.setText("yourDesiredText");    
        } else if (spinner.getSelectedItem().toString().equals("someSpinnerData2")) {
                  editText.setText("someSpinnerData2");    
        }
    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
    }
});
作者: Orvenito 发布者: 2017 年 9 月 15 日

2

1636 作者的声誉

决定

感谢您在评论中进行澄清。

从我现在所了解的是,您可以动态膨胀并添加其他文本字段。然后它们都具有相同的ID,正确。

那么,如何区分它们呢?简单的解决方案:

final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
itineraryDetailLL.addView(childView);

您不应该只让一个childView成员,而是创建一个成员列表(或“词典”,或最适合您的下一个操作的任何成员)。在每个.findViewById视图中,您都可以为该视图中包含的编辑文本的ID 做一个。

因此,也许看起来像这样:

Map<Integer, View> myChilds = new ....
final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
itineraryDetailLL.addView(childView);
// Here is your "make it unique" part:
myChilds.put(your_next_unique_id, childView);
...
// When you want to access them
EditText txt = myChilds.get(my_unique_id).findViewById(xml_id_of_edittext);
txt.setText("...");

希望您能想到可以将您引向何处。干杯,格里斯

作者: Grisgram 发布者: 2017 年 9 月 15 日
32x32