代码问题查找id和索引

时间:2011-05-13 15:59:47

标签: android

编程和android的新手,所以我真的不知道我在做什么。任何人都可以告诉我为什么这个代码返回索引的错误值-1和id的10位数字,当我明确指定一个id并且索引不应该是-1,因为它的基于0?

我认为问题出现在代码中的某个地方获得了焦点视图,但我尝试过findFocus和getCurrentFocus,两者都返回同样的东西。这是代码,谢谢!

llmain = (LinearLayout) findViewById(R.id.linearLayoutMain);
    linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int pos = 0;

    View myView = linflater.inflate(R.layout.action, null);
    myView.setId(pos);
    pos++;
    llmain.addView(myView);
    myView.requestFocus();
    View v = getCurrentFocus();
    if(v instanceof EditText) {
       id = v.getId();
       index = llmain.indexOfChild(v);
       Context context = getApplicationContext();
       CharSequence text = "index is:" + index + "id is:" + id;
       int duration = Toast.LENGTH_SHORT;

       Toast toast = Toast.makeText(context, text, duration);
       toast.show();
    }
} 

1 个答案:

答案 0 :(得分:1)

在android中,视图ID是一个Long,它是该视图的唯一标识符。最好不要使用这个数字来引用,而是使用R.id.viewIdSuppliedInLayout,这样你可以使用描述性文本而不是试图保持哪些数字指向哪些视图。如果您正在创建动态视图,则会为其分配一个ID,您不必设置它。在你的inflate()方法中,你应该传递R.id.actionsRootViewID作为第二个参数。我的直觉是,这就是indexOf返回-1的原因,因为它无法找到您正在寻找的视图。 0将是布局中的第一个视图,因为它没有找到你的视图,它需要以某种方式让你知道它找不到,所以他们选择让它返回-1来表示这一点。