-1

我有这段代码,我在其中使用 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向我显示 id 为16908308. 而 id 应该是(200+i).

4

6 回答 6

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()));

        }
    });

请试一试。。

于 2013-09-21T06:19:48.777 回答
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()));

        }
    });
于 2013-09-21T06:24:02.923 回答
0

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

并且arg1在下面的方法中是单击视图AutoCompleteTextView(不是 AutoCompleteTextView)

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

试试这个代码

Log.d("success", String.valueOf(arg0.getId()));
于 2013-09-21T06:26:42.500 回答
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% 工作。

于 2013-09-21T06:30:47.807 回答
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()));

        }

编辑:

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

于 2013-09-21T06:46:58.290 回答
-1

我认为你不需要 get id 来玩AutoCompleteTextView

你可以试试下面的代码...

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 而不是 array 以避免重复代码

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

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

// do something with your AutoCompleteText
}
于 2013-09-21T07:26:35.060 回答