android.widget.AutoTextComplete中的ClassCastException

时间:2012-04-05 11:40:17

标签: java android android-layout

public class Review extends Activity {

    private CustomAutoCompleteView autoComplete;
    private ArrayAdapter<String> autoCompleteAdapter;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.review);

        System.out.print("1");
        autoCompleteAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line);
        System.out.print("2");
        autoCompleteAdapter.setNotifyOnChange(true); d
        autoComplete = (CustomAutoCompleteView) findViewById(R.id.autoCompleteTextView1);/*Line which is unable to cast throws Exception*/
        autoComplete.setHint("Restaurant Name");
        autoComplete.setThreshold(3);
        autoComplete.setAdapter(autoCompleteAdapter);
        autoComplete.addTextChangedListener(textChecker);

        final EditText et1=(EditText)findViewById(R.id.editText3);
}

CustomAutoCompleteView.java

public class CustomAutoCompleteView extends AutoCompleteTextView {
public CustomAutoCompleteView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public CustomAutoCompleteView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public CustomAutoCompleteView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
protected void performFiltering(final CharSequence text, final int keyCode) {
String filterText = "";
super.performFiltering(filterText, keyCode);
}
/**
* After a selection, capture the new value and append to the existing
* text
*/
@Override
protected void replaceText(final CharSequence text) {
super.replaceText(text);
}
}
  

我无法将AutoCompleteText类转换为CustomAutoCompleteView.Even,尽管类CustomAutoCompleteView包含匹配的构造函数。它会引发运行时异常。请帮助我。

1 个答案:

答案 0 :(得分:0)

如果类B扩展A,则可以将类B强制转换为类A,因为可以保证B的所有实例都是实例A。但是,您无法保证A的实例为B,因此如果您尚未使用,AB的演员可能会抛出ClassCastException instanceof验证A的实例实际上是B的实例。

关于构造的声明如果不适用,因为强制转换不使用构造函数,并且对象已经存在。