[已解决]findviewbyid android.content.res.Resources$NotFoundException

setText的时候报错,显示android.content.res.Resources$NotFoundException,

这个是因为setText的时候里面的是数字了,而数字setText默认的认为就是id了,所以例如我这里是setText(2),那么它会去找2的这个id的,而不是直接设置文字为2

应该是setText("2");这样就可以了

就是说setText里面最好是字符串



参考:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310579135480ddd276b97844b22918448e435061e5a25a4ec66644b598f84616406a44f5decf4366f6d5e65a09bbed91981ac925e749f2742234dd71653920eafbd007f9637902cadf44ea2fbe732e5f58e92840204dd537327d4e78b2c5303ca19a4496ca5f1d95f15295ae5b3276589072462c26406a1478fb36e3847dcad8b48099e6a866e4bcaea22b04f43e64fb31f6a7f53a03de259007171a158278e02675385eb2ca3712e0562a148c2e29df7b01edbcbea40c5aedcaf5ec677e6b4bea42c042712ed25cfe1e2ec2a64345c8a81835182&p=ce67c64ad4934eac52e7883d5a4a95&newp=8b2a975f97af11a05be79e6f59408c231601d13523808c0a3e83fe48996e5155113d8eff7062515f8e99736300a84856e8f33371300327bd9dc38a40d7b8866e42c970767f4bda17089275&user=baidu&fm=sc&query=How+can+I+access+the+views+inside+of+a+footer+xml+layout%3F&qid=a8f2c5b70000b8d5&p1=1




Everything works fine in my code until I put this code shown here anywhere in the other code to get access to the TextView inside the xml footer layout:

  TextView totalTextView = (TextView) footer.findViewById(R.id.total_text);
  totalTextView.setText(totalPrice);

total_text is a TextView that is located in the xml file that I use as a footer.

This footer xml layout named, alternative.xml shows up at the bottom of the ListView that is populated with other items filled by the adapter using a different xml layout. the only thing inside this footer layout file is the TextView named total_text.

How can I access this TextView called total_text inside the footer xml layout?

Here is the stacktrace from Logcat:

FATAL EXCEPTION`: main
java.lang.RuntimeException: Unable to start activityComponentInfo{com.forever.scrollcheck/com.forever.scrollcheck.MainActivity}:
android.content.res.Resources$NotFoundException: String resource ID #0x543a8
    E/AndroidRuntime(8208): at adroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
    E/AndroidRuntime(8208): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    E/AndroidRuntime(8208): at android.app.ActivityThread.access$600(ActivityThread.java:123)
    E/AndroidRuntime(8208): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    E/AndroidRuntime(8208): at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(8208): at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime(8208) :at android.app.ActivityThread.main(ActivityThread.java:4424)
    E/AndroidRuntime(8208): at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime(8208): at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime(8208): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

Here is the code in the Activity class:

 listView = (ListView) findViewById(R.id.listView);

  View footer = getLayoutInflater().inflate(R.layout.alternative, null);

  TextView totalTextView = (TextView) footer.findViewById(R.id.total_text);
  totalTextView.setText(totalPrice);

  listView.addFooterView(footer); 

  MobileArrayAdapter adapter = new MobileArrayAdapter(this, R.layout.row_layout, ckbInfo);
  listView.setAdapter(adapter);

code in the ArrayAdapter class that is nested inside of the Activity class:

  public class MobileArrayAdapter extends ArrayAdapter<CheckBoxInfo>{
      CheckBoxInfo[] objects;
      Context context;
      int textViewResourceId;

    public MobileArrayAdapter(Context context, int textViewResourceId,
    CheckBoxInfo[] objects) {
       super(context, textViewResourceId, objects);
       this.context = context;
       this.textViewResourceId = textViewResourceId;
       this.objects = objects;

       }

 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {
 View row_layout_view = convertView;

 if ((row_layout_view == null)){


  LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  row_layout_view = inflater.inflate(R.layout.row_layout, null);
            }               
 //CheckBoxInfo item = objects.get(position);  // for arrayList
 CheckBoxInfo item = objects[position];

 if(item != null){

 TextView textView = (TextView) row_layout_view.findViewById(R.id.textView1);
 final CheckBox checkBox = (CheckBox) row_layout_view.findViewById(R.id.checkBox1);
 TextView priceTextView = (TextView) row_layout_view.findViewById(R.id.price1);

 checkBox.setOnClickListener(new OnClickListener() {

 @Override
    public void onClick(View arg0) {
    final boolean isChecked = checkBox.isChecked();
    if(isChecked==true){
 Toast.makeText(MainActivity.this,"box is checked for position " + position, Toast.LENGTH_SHORT).show();
 }else if(isChecked==false){
 Toast.makeText(MainActivity.this,"box is NOT checked for " + position, Toast.LENGTH_SHORT).show();
     }
   }
      });

   if(item !=null){
      textView.setText(item.checkBoxName);
      checkBox.setChecked(item.checkBoxState);
      priceTextView.setText(String.valueOf(item.price));
    }
      }
    return row_layout_view;
    }

  }

EDIT: As requested here is the code from alternative.xml:

  <?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="vertical"
  android:gravity="center" >

  <TextView
    android:id="@+id/total_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="XXXXXX"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
share | improve this question
 
 
post your alternative.xml code –  Sankar V  Apr 11 '13 at 8:05
 
is totalPrice String or int? –  Vladimir  Apr 11 '13 at 8:05
 
totalPrice is an int –  Kevik  Apr 11 '13 at 8:09

2 Answers

up vote  2  down vote accepted

According to stack trace, it looks like you are trying to call totalTextView.setText() passing int argument. If this is the case, argument is treated as a resource id. You probably need to use

totalTextView.setText(Integer.toString(totalPrice));
share | improve this answer
 
 
YES!!!! that is the problem, it works now!!!!!!! –  Kevik  Apr 11 '13 at 8:11
 
or just totalTextView.setText(totalPrice+""); –  almaz_from_kazan  Apr 11 '13 at 8:13
1 
@almaz_from_kazan: and give the garbage collector more work to do? –  MH.  Apr 11 '13 at 9:26

This should do the trick for you, basically the TextViews setText method requires a String.

totalTextView.setText(String.valueOf((totalPrice));
share | improve this answer
 
 


Everything works fine in my code until I put this code shown here anywhere in the other code to get access to the TextView inside the xml footer layout:

  TextView totalTextView = (TextView) footer.findViewById(R.id.total_text);
  totalTextView.setText(totalPrice);

total_text is a TextView that is located in the xml file that I use as a footer.

This footer xml layout named, alternative.xml shows up at the bottom of the ListView that is populated with other items filled by the adapter using a different xml layout. the only thing inside this footer layout file is the TextView named total_text.

How can I access this TextView called total_text inside the footer xml layout?

Here is the stacktrace from Logcat:

FATAL EXCEPTION`: main
java.lang.RuntimeException: Unable to start activityComponentInfo{com.forever.scrollcheck/com.forever.scrollcheck.MainActivity}:
android.content.res.Resources$NotFoundException: String resource ID #0x543a8
    E/AndroidRuntime(8208): at adroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
    E/AndroidRuntime(8208): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    E/AndroidRuntime(8208): at android.app.ActivityThread.access$600(ActivityThread.java:123)
    E/AndroidRuntime(8208): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    E/AndroidRuntime(8208): at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(8208): at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime(8208) :at android.app.ActivityThread.main(ActivityThread.java:4424)
    E/AndroidRuntime(8208): at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime(8208): at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime(8208): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

Here is the code in the Activity class:

 listView = (ListView) findViewById(R.id.listView);

  View footer = getLayoutInflater().inflate(R.layout.alternative, null);

  TextView totalTextView = (TextView) footer.findViewById(R.id.total_text);
  totalTextView.setText(totalPrice);

  listView.addFooterView(footer); 

  MobileArrayAdapter adapter = new MobileArrayAdapter(this, R.layout.row_layout, ckbInfo);
  listView.setAdapter(adapter);

code in the ArrayAdapter class that is nested inside of the Activity class:

  public class MobileArrayAdapter extends ArrayAdapter<CheckBoxInfo>{
      CheckBoxInfo[] objects;
      Context context;
      int textViewResourceId;

    public MobileArrayAdapter(Context context, int textViewResourceId,
    CheckBoxInfo[] objects) {
       super(context, textViewResourceId, objects);
       this.context = context;
       this.textViewResourceId = textViewResourceId;
       this.objects = objects;

       }

 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {
 View row_layout_view = convertView;

 if ((row_layout_view == null)){


  LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  row_layout_view = inflater.inflate(R.layout.row_layout, null);
            }               
 //CheckBoxInfo item = objects.get(position);  // for arrayList
 CheckBoxInfo item = objects[position];

 if(item != null){

 TextView textView = (TextView) row_layout_view.findViewById(R.id.textView1);
 final CheckBox checkBox = (CheckBox) row_layout_view.findViewById(R.id.checkBox1);
 TextView priceTextView = (TextView) row_layout_view.findViewById(R.id.price1);

 checkBox.setOnClickListener(new OnClickListener() {

 @Override
    public void onClick(View arg0) {
    final boolean isChecked = checkBox.isChecked();
    if(isChecked==true){
 Toast.makeText(MainActivity.this,"box is checked for position " + position, Toast.LENGTH_SHORT).show();
 }else if(isChecked==false){
 Toast.makeText(MainActivity.this,"box is NOT checked for " + position, Toast.LENGTH_SHORT).show();
     }
   }
      });

   if(item !=null){
      textView.setText(item.checkBoxName);
      checkBox.setChecked(item.checkBoxState);
      priceTextView.setText(String.valueOf(item.price));
    }
      }
    return row_layout_view;
    }

  }

EDIT: As requested here is the code from alternative.xml:

  <?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="vertical"
  android:gravity="center" >

  <TextView
    android:id="@+id/total_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="XXXXXX"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
share | improve this question
 
   
post your alternative.xml code –  Sankar V  Apr 11 '13 at 8:05
   
is totalPrice String or int? –  Vladimir  Apr 11 '13 at 8:05
   
totalPrice is an int –  Kevik  Apr 11 '13 at 8:09

2 Answers

up vote  2  down vote accepted

According to stack trace, it looks like you are trying to call totalTextView.setText() passing int argument. If this is the case, argument is treated as a resource id. You probably need to use

totalTextView.setText(Integer.toString(totalPrice));
share | improve this answer
 
   
YES!!!! that is the problem, it works now!!!!!!! –  Kevik  Apr 11 '13 at 8:11
   
or just totalTextView.setText(totalPrice+""); –  almaz_from_kazan  Apr 11 '13 at 8:13
1 
@almaz_from_kazan: and give the garbage collector more work to do? –  MH.  Apr 11 '13 at 9:26

This should do the trick for you, basically the TextViews setText method requires a String.

totalTextView.setText(String.valueOf((totalPrice));
share | improve this answer
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值