2010-08-15 25 views
16

Deseo implementar mi propia base Tokenizer en el archivo "MultiAutoCompleteTextView.java",Cómo resolver el error "com.android.internal.R no se puede resolver" cuando utilizo el archivo de Android 'MultiAutoCompleteTextView.java',

pero se produzca un error "com.android.internal.R cannot be resolved" cuando intento

importación "MultiAutoCompleteTextView.java" a mi proyecto.

código:

public class MultiAutoCompleteTextView extends AutoCompleteTextView { 
    private Tokenizer mTokenizer; 

    public MultiAutoCompleteTextView(Context context) { 
     this(context, null); 
    } 

    public MultiAutoCompleteTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, com.android.internal.R.attr.autoCompleteTextViewStyle); 
    } 

    public MultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle)  { 
     super(context, attrs, defStyle); 
    } 
    . 
    . 
    . 
} 

no he investigar las soluciones para resolver este problem.How para corregir "com.android.internal.R.attr.autoCompleteTextViewStyle" mi propia atr?

Gracias por cualquier sugerencia.

+0

Intenta presionar ctrl + 0? – Techboy

+0

No se puede utilizar 'MultiAutoCompleteTextView' directamente como dentro del SDK sin declararse a sí mismo? – rciovati

Respuesta

0

No estoy seguro de si puede importar y consultar desde internal. Como solución alternativa, descargue las referencias de la fuente de Android e incluya en sus propios recursos la referencia de su paquete.

+0

Gracias por su respuesta. Deseo cambiar algunos métodos en este perfil de Java a mis métodos, e importarlos a mi proyecto. Pero no puedo corregir el error en esta oración "this (context, attrs, com.android.internal.R.attr.autoCompleteTextViewStyle) " – huaigu

+1

¿Ha intentado reescribir a' com.android.R.attr.autoCompleteTextViewStyle' desmantelando el paquete interno? – Pentium10

+0

No sé cómo volver a escribir este archivo y no puedo encontrar este archivo ... – huaigu

3

intente copiar la entrada de attrattrs.xml:

<attr name="autoCompleteTextViewStyle" format="reference" /> 

Añadir un res/values/attrs.xml a su aplicación y poner esta línea en ese país. Por último, actualizar el código para hacer referencia R de su paquete:

import com.your.package.R; 
... 
public MultiAutoCompleteTextView(Context context, AttributeSet attrs) { 
    this(context, attrs, R.attr.autoCompleteTextViewStyle); 
} 

crédito a inazaruk para este procedimiento.

11

Usted podría utilizar

public MultiAutoCompleteTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 
     Resources.getSystem().getIdentifier("autoCompleteTextViewStyle", "attr", "android"); 
    } 

No se puede acceder de identificación de com.android.internal.R en tiempo de compilación, pero se puede acceder a los recursos internos definidos en tiempo de ejecución y obtener el recurso por su nombre. Debe tener en cuenta que esto es más lento que el acceso directo y no hay garantía de que un recurso interno estará disponible en futuras versiones de Android o en compilaciones específicas del proveedor.

+1

Esto no compilaría porque las llamadas a this() o super() debe ser la primera línea en un constructor. Sin embargo, puede alinear la variable de id, por ejemplo: 'public MultiAutoCompleteTextView (Context context, AttributeSet attrs) { this (context, attrs, Resources.getSystem(). getIdentifier ("autoCompleteTextViewStyle", "attr", "android")); } ' – k2col

+0

Por supuesto que tiene razón, modifiqué la respuesta, gracias – yonojoy

1

Sí, puede utilizar la R interna con reflexión de Java.

Para obtener autoCompleteTextViewStyle:

Class clasz = Class.forName("com.android.internal.R$attr") 
Field field = clasz.getDeclaredField("autoCompleteTextViewStyle"); 
field.setAccessible(true); 
int autoCompleteTextViewStyle= (int)field.get(null); 

Como se ha dicho antes, de esta manera es un truco, por lo general Android proporciona un estilo similar o igual pública basado en android.R

+0

La reflexión causa penalizaciones en el tiempo de ejecución. –

1

Esto funciona:

int id = Resources.getSystem().getIdentifier("config_sms_capable", "bool", "android"); 
    Resources res = Resources.getSystem(); 
    boolean configSMSCapable = res.getBoolean(id); 
    TextView displayText = findViewById(R.id.displayText); 
    String configSMSCapableString = configSMSCapable ? "TRUE" : "FALSE"; 
    displayText.setText("config_sms_capable = " + configSMSCapableString); 

Debe especificar la variable que desea de la misma manera.

Cuestiones relacionadas