【问题标题】:Can't cast from View to EditText无法从 View 投射到 EditText
【发布时间】:2014-01-13 11:21:39
【问题描述】:

我有 EditText 是从 java 而不是 xml 资源添加的。当我想访问EditText 时,我收到了这个错误:

01-13 13:17:22.084: E/AndroidRuntime(21787): java.lang.ClassCastException: android.view.View cannot be cast to android.widget.EditText

在这里我试图访问它:

private List<Double> getFieldsData() {
    List<Double> data = new ArrayList<Double>();
    for (int i = 0; i < lytContainer.getChildCount(); i++) {
        LinearLayout lyt = (LinearLayout) lytContainer.getChildAt(i);

        View txt1 = lyt.getChildAt(0);
        View txt2 = lyt.getChildAt(1);

        valid = Util.checkValidation(getApplicationContext(),
                ((EditText) txt1), ((EditText) txt2));

        Double val1 = Double.parseDouble(((EditText) txt1).getText()
                .toString());
        Double val2 = Double.parseDouble(((EditText) txt2).getText()
                .toString());

        data.add(val1);
        data.add(val2);
    }
    return data;
}

在这里我添加 EditText :

private void createFields(int count) {
    for (int i = 0; i < count; i++) {

        LinearLayout lyt = new LinearLayout(getApplicationContext());
        LinearLayout.LayoutParams p = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        lyt.setLayoutParams(p);

        LinearLayout.LayoutParams p2 = new LayoutParams(0,
                LayoutParams.WRAP_CONTENT, 1);

        LinearLayout.LayoutParams pv = new LayoutParams(0, 0, 1);
        TextView txt1 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
        TextView txt2 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);

        txt1.setInputType(InputType.TYPE_CLASS_NUMBER);
        txt2.setInputType(InputType.TYPE_CLASS_NUMBER);
        txt1.setLayoutParams(p2);
        txt2.setLayoutParams(p2);

        lyt.setPadding(20, 4, 20, 4);

        txt1.setTextColor(Color.BLACK);
        txt2.setTextColor(Color.BLACK);

        lyt.addView(txt1);

        View v = new View(getApplicationContext());
        v.setLayoutParams(pv);
        lyt.addView(v);
        lyt.addView(txt2);

        lytContainer.addView(lyt);

    }
}

【问题讨论】:

    标签: java android view casting android-edittext


    【解决方案1】:

    在您的 createField 方法中,您在下面的行中进行了错误的转换

    TextView txt1 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
        TextView txt2 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
    

    将 TextView 更改为 EditText(当您膨胀视图时) //createFields方法的变化

     EditTexttxt1 = (EditText) getLayoutInflater().inflate(
                    R.layout.my_edittext, null);
            EditTexttxt2 = (EditText) getLayoutInflater().inflate(
                    R.layout.my_edittext, null);
    

    【讨论】:

    • -1 这种类型的选择很奇怪;并反映了一些混乱,但 afaik 并没有引起提问者的问题。
    【解决方案2】:

    您的代码看起来很奇怪,但据我所知,错误就在这里:

     lyt.addView(txt1); // view 0
     View v = new View(getApplicationContext());
     v.setLayoutParams(pv);
     lyt.addView(v); // view 1
     lyt.addView(txt2); // view 2
    

    您的孩子(1) 不是 EditText 而是 View。请改用 child(0) 和 child(2)。

    顺便说一句。你为什么做这个?

    TextView txt1 = (EditText) getLayoutInflater().inflate(R.layout.my_edittext, null);
    

    你为什么在这里使用 TextView?您是否还需要将这个奇怪的 View v 添加到您的布局中,它是做什么用的?

    【讨论】:

    • 我需要添加隐形视图以在行中创建 3 个视图。其中每个宽度的比例应为 1/3
    【解决方案3】:

    改变

    TextView txt1 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
        TextView txt2 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
    

    EditText txt1 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
        EditText txt2 = (EditText) getLayoutInflater().inflate(
                R.layout.my_edittext, null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多