Android 为膨胀视图中的图元指定任何唯一标识符

Android 为膨胀视图中的图元指定任何唯一标识符,android,layout-inflater,Android,Layout Inflater,我想知道我们是否可以为膨胀视图中的元素指定任何唯一的编号 我的观点是这样的,这张图片可能会让你知道我在做什么: 我试图做的是根据选择的微调器项更改编辑文本框的值,如下所示: //spinnerPlanItinerary is the first spinner spinnerPlanItinerary.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override

我想知道我们是否可以为膨胀视图中的元素指定任何唯一的编号

我的观点是这样的,这张图片可能会让你知道我在做什么:

我试图做的是根据选择的微调器项更改编辑文本框的值,如下所示:

//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();
            }
        });
final LinearLayout itineraryDetailLL = (LinearLayout) findViewById(R.id.itineraryDetailLinearlayout);

        final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
        itineraryDetailLL.addView(childView);
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("...");

如果要更改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
    }
});
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
已选择公共视图(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
if(spinner.getSelectedItem().toString().equals(“someSpinnerData”)){
setText(“您想要的文本”);
}else if(spinner.getSelectedItem().toString().equals(“someSpinnerData2”)){
setText(“someSpinnerData2”);
}
}
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});

感谢您在评论中的澄清

根据我现在的理解,您可以动态地膨胀并添加额外的文本字段。那么他们都有相同的ID,对吗

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

final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
itineraryDetailLL.addView(childView);
您不应该只创建一个
childView
成员,而应该创建它们的列表(或字典,或最适合您下一步操作的任何东西)。 在每个视图中,您可以对该视图中包含的编辑文本的ID执行
.findViewById

所以,也许它看起来像这样:

//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();
            }
        });
final LinearLayout itineraryDetailLL = (LinearLayout) findViewById(R.id.itineraryDetailLinearlayout);

        final View childView = getLayoutInflater().inflate(R.layout.cardview, null);
        itineraryDetailLL.addView(childView);
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("...");
Map myChilds=new。。。。
最终视图childView=GetLayoutFlater().充气(R.layout.cardview,null);
行程详情ll.addView(childView);
//以下是您的“使其独一无二”部分:
myChilds.put(您的下一个唯一id,childView);
...
//当您想要访问它们时
EditText txt=myChilds.get(my_unique_id).findViewById(xml_id_of_EditText);
txt.setText(“…”);
我希望你知道这会把你带到哪里。
干杯,女孩

对不起,我不明白你想做什么?布局文件中的ID已经是唯一的ID。为什么需要一秒钟,为什么?你有你需要的一切。。。您在单击时做出反应,然后为文本字段设置值。@Grisgram,两个膨胀视图上的编辑文本具有相同的id,因为同一视图膨胀两倍于您可以看到的图像。我的问题是,每当我从第一个膨胀视图的第一个微调器中选择不同的项目时,第二个膨胀视图元素中就会发生更改(在编辑文本中设置值)。我希望这已经把我的问题说清楚了。@Grisgram,我也编辑了我的问题。你可以通过调用
setTag(Object Object)
ah我明白了-你动态添加它们-现在我明白了。谢谢。我来试试这个解决方案亮了!非常感谢!:)