android.content.res.Resources error $ NotFoundException: Archivo de tipo xml recurso diseño ID # 0x102000a
-
09-10-2019 - |
Pregunta
Hola, estoy tratando de crear un diseño para una lista que parece (y en su mayoría se comporta como) el registro de llamadas, como se muestra aquí:
Para esto he descargado el código fuente y estoy estudiando para saber qué clase y archivo XML implementan.
Y me encontré con estos dos archivos XML recent_calls_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="7dip">
<com.psyhclo.DontPressWithParentImageView
android:id="@+id/call_icon" android:layout_width="wrap_content"
android:layout_height="match_parent" android:paddingLeft="14dip"
android:paddingRight="14dip" android:layout_alignParentRight="true"
android:gravity="center_vertical" android:src="@android:drawable/sym_action_call"
android:background="@drawable/call_background" />
<include layout="@layout/recent_calls_list_item_layout" />
y el otro es recent_calls_list_item_layout.xml :
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<View android:id="@+id/divider"
android:layout_width="1px"
android:layout_height="match_parent"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:layout_toLeftOf="@id/call_icon"
android:layout_marginLeft="11dip"
android:background="@drawable/divider_vertical_dark"
/>
<ImageView android:id="@+id/call_type_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="4dip"
/>
<TextView android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/divider"
android:layout_alignParentBottom="true"
android:layout_marginBottom="8dip"
android:layout_marginLeft="10dip"
android:textAppearance="?android:attr/textAppearanceSmall"
android:singleLine="true"
/>
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="36dip"
android:layout_marginRight="5dip"
android:layout_alignBaseline="@id/date"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
/>
<TextView android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/label"
android:layout_toLeftOf="@id/date"
android:layout_alignBaseline="@id/label"
android:layout_alignWithParentIfMissing="true"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<TextView android:id="@+id/line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/divider"
android:layout_above="@id/date"
android:layout_alignWithParentIfMissing="true"
android:layout_marginLeft="36dip"
android:layout_marginBottom="-10dip"
android:textAppearance="?android:attr/textAppearanceLarge"
android:singleLine="true"
android:ellipsize="marquee"
android:gravity="center_vertical"
/>
Y mi actividad es la siguiente:
public class RatedCalls extends ListActivity {
private static final String LOG_TAG = "RecentCallsList";
private TableLayout table;
private CallDataHelper cdh;
private TableRow row;
private TableRow row2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recent_calls_list_item);
Log.i(LOG_TAG, "calling from onCreate()");
cdh = new CallDataHelper(this);
table = new TableLayout(getApplicationContext());
row = new TableRow(getApplicationContext());
startService(new Intent(this, RatedCallsService.class));
Log.i(LOG_TAG, "Service called.");
fillList();
}
public void onResume() {
super.onResume();
fillList();
}
public void fillList() {
List<String> ratedCalls = new ArrayList<String>();
ratedCalls = this.cdh.selectTopCalls();
setListAdapter(new ArrayAdapter<String>(RatedCalls.this,
android.R.id.list, ratedCalls));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_LONG).show();
}
});
}
}
Y luego traté de ejecutarlo en el emulador de Android, y luego se la LogCat devuelve un error como este:
Causado por: java.lang.RuntimeException: Su contenido debe tener un ListView cuyo atributo id es 'android.R.id.list'
Así que dentro de la recent_calls_list_item.xml declaré esto:
<ListView android:id="@android:id/list" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_x="1px"
android:layout_y="1px">
</ListView>
Y ahora con esta declararon Traté de correr en el emulador, pero el LogCat devuelve otro error:
android.content.res.Resources $ NotFoundException: Archivo de tipo xml recurso diseño ID # 0x102000a
Por lo tanto, mi pregunta es, ¿por qué sucede esto? Y si tiene otra solución para implementar una vista como esta que estoy tratando.
Gracias.
Solución
ajustar el ID de su Listview a
android:id="@id/android:list"
No sé, si
android:id="@android:id/list"
funciona correctamente
Otros consejos
Yo tenía el mismo problema. Yo estaba sentado el texto siguiente:
statusView.setText(firstVisiblePosition);
El problema era que firstVisiblePosition era un número entero. Compilador no se quejó. Corregido por
statusView.setText(""+firstVisiblePosition);
Sonidos cojo, pero si usted está usando Eclipse, ¿ha tratado la limpieza y la reconstrucción de su proyecto? Que se fije un problema similar que tenía.
También soy capaz de resolver el problema convirtiendo el valor entero en cadena durante el uso:
name.setText(name_value_needs_to_be_string);
, donde nombre es un TextView.
El compilador interpreta el argumento int
como una referencia de recursos y asume que está llamando:
public final void setText (int resourceId)
pero su intención era llamar
public final void setText (CharSequence text)
Para solucionarlo, hacerlo de esta manera:
myTextView.setText(Integer.toString(myIntegerValue));
Me solucionó este problema mediante la copia de archivos XML desde el directorio layout-land
a layout
(o viceversa). Algunos dispositivos tienen por defecto el modo de paisaje, retrato demás. Si ese archivo no existe en ese modo, se lanza esta excepción.