1

クリックして子を展開すると、子レイアウトExpandableListViewのテキストを更新しようとすると「Idnotfound」エラーがスローされるというものがあります。TextViewこのセクションをコメントアウトすると、正常に機能します。私は自分のプロジェクトを、その場所で見つけた例に基づいています。誰かが私が間違っているところを見つけることができますか?

子のレイアウトは次のとおりです。

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView android:id="@+id/breakdown_item_a"
        android:layout_height="40dip" 
        android:layout_width="40dip" 
        android:layout_marginLeft="40dip"
        android:text="A" />

    <TextView android:id="@+id/breakdown_item_b"
        android:layout_height="40dip" 
        android:layout_width="40dip" 
        android:layout_marginLeft="40dip"
        android:text="B" />
</LinearLayout>

そして、子ビューを作成するコードは次のとおりです。

public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View rowView, ViewGroup parent) { 
    if (rowView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        rowView = inflater.inflate(R.layout.list_level_breakdown_item, null);
    }
    // If I comment out the next few lines it works, else it crashes here
    ((TextView)rowView.findViewById(R.id.breakdown_item_a)).setText(this.getChild(groupPosition, childPosition).getA());            ((TextView)rowView.findViewById(R.id.breakdown_item_b)).setText(this.getChild(groupPosition, childPosition).getB());

    return rowView;
}

ついに私のPCに到達し、これがスローされているエラーメッセージです。スタックトレースを見ると、ID自体の取得ではなく、ビューに問題があるようです。

FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException: String resource ID #0xa
at android.content.res.Resources.getText(Resources.java:247)
at android.widget.TextView.setText(TextView.java:3473)
at testing.android.arrayadapters.BreakdownArray.getChildView(BreakdownArray.java:50)
at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:450)
at android.widget.AbsListView.obtainView(AbsListView.java:2033)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
at android.widget.ListView.onMeasure(ListView.java:1155)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:660)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
at android.view.View.measure(View.java:12723)
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1196)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:555)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
at android.view.View.measure(View.java:12723)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
at android.view.View.measure(View.java:12723)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
at android.view.View.measure(View.java:12723)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

何かの測定が気に入らないようです。コードを更新しました(レイアウトと子ビュー)。固定幅に更新して、それが役立つかどうかを確認しました。これまでのところ運がいじくり回し続けることはありません

4

2 に答える 2

1

まったく同じIDを持つ2人の子がいるというだけなので、AndroidがIDで要素を取得するように求められたときに、どちらを取得するかがわかりません。...

<LinearLayout>
    <TextView android:id="@+id/breakdown_item" ...>
    <TextView android:id="@+id/breakdown_item" ...>
</LinearLayout>

おそらく、子を別のIDに変更して、子が一意になるようにする必要があります。たとえば、次のようになります...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal">
      <TextView android:id="@+id/first_breakdown_item" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="0.5" android:text="A" /> 
      <TextView android:id="@+id/second_breakdown_item" android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="0.5" android:text="B" /> 
</LinearLayout>
于 2012-11-20T12:16:49.483 に答える
0

わかりました。理由がわかりました。getA()メソッドはintを返したため、文字列に自動変換されないため、クラッシュしたように見えます。だから、それは理由もなくお尻の素晴らしい痛みでした:(混乱した人たちについて申し訳ありません。しかし、全体的なレッスンは次のとおりです:

テキストビューのテキスト値を割り当てる場合は、エラーをスローしないため、パラメータを渡すときに常に明示的に文字列に変換します...ただし、実行するとクラッシュします。

でも見てくれてありがとう。

于 2012-11-21T20:47:03.547 に答える