setid()和getId()方法给出了奇怪的结果

时间:2013-09-21 06:13:39

标签: android arrays runtime

我有这个代码,我在动态添加视图并使用setId()方法分配id。问题是,当我使用getId方法检索Id时,我在logcat中得到了相当奇怪的结果。以下是代码:

for(int i=0;i<10;i++){
    row[i]=new LinearLayout(this);

    items[i]=new AutoCompleteTextView(this);
    items[i].setHint("Enter Item Name");
    items[i].setAdapter(adapter);
    items[i].setThreshold(1);
    items[i].setId(200+i);
    items[i].setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

            Log.d("success", String.valueOf(arg1.getId()));
            //quants[arg1.getId()-1000].setText(db.getStockStatus(db.getItemCode(arg0.getItemAtPosition(arg2).toString())));
        }
    });
}

logcat向我显示了16908308的ID。而id应为(200+i)

6 个答案:

答案 0 :(得分:0)

items[i].setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {
            // 
            Log.d("success", String.valueOf(position.getId()));

        }
    });

请试试..

答案 1 :(得分:0)

尝试这个

items[i].setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {
            // 
            Log.d("success", String.valueOf(items[position].getId()));

        }
    });

答案 2 :(得分:0)

使用此代码items[i].setId(200+i);,您将ID分配给AutoCompleteTextView

以下方法中的arg1AutoCompleteTextView(非自动完成文本视图)的点击视图

@Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int postion,
            long arg3)

试试这段代码

Log.d("success", String.valueOf(arg0.getId()));

答案 3 :(得分:0)

在您的代码onItemClick中,您可以获得所点击视图的position

现在您必须使用

获取点击次数值
String.valueOf(items[position].getId())

<强>更新

@Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3) {

            Log.d("val", String.valueOf(items[position].getId()));
        }
    });

什么是以val标签打印

它将100%有效。

答案 4 :(得分:0)

使用,

...

int id=200+i;
items[i].setId(id);

//点击活动

 @Override
        public void onItemClick(AdapterView<?> arg0, View view, int pos,
                long arg3) {

            Log.d("success", String.valueOf(view.getId()));

        }

编辑:

你得到16908308而不是200+i,每当我们将id指定为R.id.xx(它的唯一格式不完全是这个)时,android会将其id生成为正整数。你可以在你的R文件中看到它。不确定,但可能是你面临这个问题。无论何时创建新的AutoTextView,它都会生成这样的id。

答案 5 :(得分:-1)

我认为您不需要使用AutoCompleteTextView来获取ID。

您可以尝试以下代码......

autoCompleteText.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            if(arg0.equals(items[0])){
                   //do something with first autoCompleteText
                }else if(arg0.equals(items[1])){
                    //do something with second autoCompleteText
                }else if(arg0.equals(items[2])){
                    //do something with third autoCompleteText
                }else if(arg0.equals(items[3])){
                    //do something with fourth autoCompleteText
                }else if(arg0.equals(items[4])){
                    //do something with fifth autoCompleteText
                }


        }
    });

修改

使用arraylist而不是数组来避免重复代码

ArrayList<View> items = new ArrayList<View>();

if (items.indexOf(arg0) != -1) {
AutoCompleteTextView autoText = (AutoCompleteTextView) items.get(items.indexOf(arg0));

// do something with your AutoCompleteText
}