web-dev-qa-db-ja.com

エラーAndroid.content.res.Resources $ NotFoundException:xmlタイプのレイアウトリソースID#0x102000aからのファイル

ねえ、私はここに示すように、通話記録のように見える(そしてほとんどの場合そのように動作する)リストのデザインを作成しようとしています:

alt text

このために私はソースコードをダウンロードし、どのクラスとxmlファイルがそれを実装しているかを知るためにそれを研究しています。

そして、私はこの2つの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" />

もう1つは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"
/>

そして私の活動はこれです:

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

}

}

次に、Androidエミュレーターで実行しようとすると、LogCatが次のようなエラーを返しました。

原因:Java.lang.RuntimeException:コンテンツには、id属性が「Android.R.id.list」であるListViewが必要です。

したがって、recent_calls_list_item.xmlの中で私はこれを宣言しました:

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

そして今、これが宣言された状態で、エミュレーターで実行しようとしましたが、LogCatは別のエラーを返します。

Android.content.res.Resources $ NotFoundException:xmlタイプのレイアウトリソースID#0x102000aからのファイル

それで、私の質問は、なぜこれが起こっているのですか?そして、このようなビューを実装するための別のソリューションがある場合は、私が試しています。

ありがとう。

12
rogcg

listViewのIDをに設定します

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

わからない、

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

正しく動作します

3
Jonathan Roth

私も同じ問題を抱えていました。私は次のようにテキストを設定していました:

statusView.setText(firstVisiblePosition);

問題は、firstVisiblePositionが整数であるということでした。コンパイラは文句を言わなかった。で修正

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

足りないように聞こえますが、Eclipseを使用している場合は、プロジェクトのクリーニングと再構築を試みましたか?それは私が抱えていた同様の問題を修正しました。

7
anisbet

また、以下を使用しながら整数値を文字列に変換することで問題を解決することもできます。

name.setText(name_value_needs_to_be_string);

ここで、nameはTextViewです。

6
Khushboo

コンパイラーは、int引数をリソース参照として解釈し、以下を呼び出していると想定します。

 public final void setText (int resourceId)

しかし、あなたの意図は電話することでした

 public final void setText (CharSequence text)

これを修正するには、次のようにします。

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

XMLファイルをlayout-landディレクトリからlayoutに(またはその逆に)コピーすることで、この問題を解決しました。一部のデバイスにはデフォルトのランドスケープモードがあり、その他のデバイスにはポートレートモードがあります。そのファイルがそのモードで存在しない場合、この例外がスローされます。

0
mrek