web-dev-qa-db-fra.com

Erreur Android.content.res.Resources $ NotFoundException: fichier provenant de l'ID de ressource de présentation de type XML # 0x102000a

Hé, j'essaye de créer un design pour une liste qui ressemble (et se comporte généralement comme) au journal des appels, comme illustré ici:

alt text

Pour cela, j'ai téléchargé le code source et je l'étudie pour savoir quelle classe et quel fichier xml l'implémenter.

Et j'ai trouvé ces deux fichiers 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" />

et l'autre est 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"
/>

Et mon activité est la suivante:

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();
        }
    });

}

}

Et puis j'ai essayé de l'exécuter sur l'émulateur Android, puis LogCat a renvoyé une erreur comme celle-ci:

Causée par: Java.lang.RuntimeException: votre contenu doit avoir un ListView dont l'attribut id est 'Android.R.id.list'.

Donc, à l'intérieur du recent_calls_list_item.xml j'ai déclaré ceci:

<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>

Et maintenant, avec ceci déclaré, j'ai essayé de fonctionner dans l'émulateur, mais le LogCat renvoie une autre erreur:

Android.content.res.Resources $ NotFoundException: fichier à partir de l'ID de ressource de mise en page de type x # 0x102000a

Alors, ma question est la suivante: pourquoi cela se produit-il? Et si vous avez une autre solution pour implémenter une vue comme celle-ci, j'essaie.

Merci.

12
rogcg

définissez l'identifiant de votre liste sur

Android:id="@id/Android:list"

Je ne sais pas si

Android:id="@Android:id/list"

fonctionne correctement

3
Jonathan Roth

J'ai eu le même problème. Je mettais le texte comme ceci:

statusView.setText(firstVisiblePosition);

Le problème était que firstVisiblePosition était un entier. Le compilateur ne s'est pas plaint. Fixé par

statusView.setText(""+firstVisiblePosition);
97
ile

Cela semble nul, mais si vous utilisez Eclipse, avez-vous essayé de nettoyer et de reconstruire votre projet? Cela a résolu un problème similaire que j'avais.

7
anisbet

Je suis également capable de résoudre le problème en convertissant la valeur Integer en String en utilisant:

name.setText(name_value_needs_to_be_string);

où nom est un TextView.

6
Khushboo

Le compilateur interprète votre argument int comme une référence de ressource et suppose que vous appelez:

 public final void setText (int resourceId)

mais votre intention était d'appeler

 public final void setText (CharSequence text)

Pour le réparer, faites comme ça:

myTextView.setText(Integer.toString(myIntegerValue));
4
Gunnar Karlsson

J'ai résolu ce problème en copiant le fichier XML du répertoire layout-land dans layout (ou vice versa). Certains appareils ont le mode paysage par défaut, d'autres portrait. Si ce fichier n'existe pas dans ce mode, il lève cette exception.

0
mrek