2013-07-04 139 views
1
public class ShowActivity extends Activity implements OnClickListener{ 

    private LinearLayout llaouyBase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dashboardactivity); 
     llaouyBase = (LinearLayout) findViewById(R.id.llaouyBase); 
     Button t; 

     for(int i=0;i<5;i++) { 
      t= new Button(ShowActivity.this); 
      t.setId(i); 
      t.setOnClickListener(this); 
      llaouyBase.addView(t, i); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(getApplicationContext(), 
       v.getId(), 8000).show(); 
    } 
} 

这是我的活动,在布局中我有一个空白的线性布局,方向垂直。我试图添加5个按钮,我可以成功地做。如何添加点击这些按钮的事件?当运行这个,即时获取资源找不到异常。如何为动态添加的按钮添加点击事件

07-04 12:22:07.535: E/AndroidRuntime(20957): FATAL EXCEPTION: main 
07-04 12:22:07.535: E/AndroidRuntime(20957): android.content.res.Resources$NotFoundException: String resource ID #0x3 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.content.res.Resources.getText(Resources.java:233) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.widget.Toast.makeText(Toast.java:265) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at com.example.testapp.ShowActivity.onClick(ShowActivity.java:55) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.view.View.performClick(View.java:4103) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.view.View$PerformClick.run(View.java:17117) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.os.Handler.handleCallback(Handler.java:615) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.os.Looper.loop(Looper.java:137) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at android.app.ActivityThread.main(ActivityThread.java:4744) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at java.lang.reflect.Method.invokeNative(Native Method) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at java.lang.reflect.Method.invoke(Method.java:511) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-04 12:22:07.535: E/AndroidRuntime(20957): at dalvik.system.NativeStart.main(Native Method) 

我跟着这个链接给下面。我在这段代码中缺少什么?

How to identify the button clicked from a dynamically generated table

回答

3

变化

Toast.makeText(getApplicationContext(), 
        v.getId(), 8000).show(); 

Toast.makeText(getApplicationContext(), 
        String.valueOf(v.getId()), 8000).show(); 

如果你传递一个int值作为第二个参数makeText Android将寻求与idR.string一个字符串。如果它不存在,您的应用程序会崩溃的android.content.res.Resources$NotFoundException:

+0

总是很快。打我吧:) – Raghunandan

+0

:)我觉得同样的东西 – Blackbelt

2

这是问题

 Toast.makeText(getApplicationContext(), 
       v.getId(), 8000).show(); 

将其更改为

 Toast.makeText(getApplicationContext(), 
       ""+v.getId(), 8000).show(); 

 Toast.makeText(getApplicationContext(), 
      String.valueOf(v.getId()), 8000).show(); 

您正在使用下面

public static Toast makeText (Context context, int resId, int duration)

制作一个标准的吐司,其中只包含文本视图和来自资源的文本。

参数

context The context to use. Usually your Application or Activity object. 
resId The resource id of the string resource to use. Can be formatted text. 
duration How long to display the message. Either LENGTH_SHORT or LENGTH_LONG 

如果资源无法找到抛出

Resources.NotFoundException

其预期的资源是不存在一个int。因此,例外。

您必须使用以下

public static Toast makeText (Context context, CharSequence text, int duration)

的上述方法需要CharacterSequence所以使用String.valueOf(v.getId())

+0

清洁和整洁的答案。谢谢你 – playmaker420

+0

很好的解释+1 – Blackbelt

1

变化

Toast.makeText(getApplicationContext(), 
        v.getId(), 8000).show(); 

Toast.makeText(getApplicationContext(), 
        v.getId().toString(), 8000).show(); 
1

我想我找到了here

公共静态吐司makeText(上下文的背景下,INT渣油,诠释 持续时间)

在API级别1中添加使用资源中的文本制作仅包含文本 视图的标准吐司。

参数上下文要使用的上下文。通常是您的应用程序或活动对象 。 resId要使用的字符串资源的资源ID。 可以是格式化文本。持续时间显示消息的时间。 LENGTH_SHORT或LENGTH_LONG如果找不到资源不能 则抛出。 Resources.NotFoundException公共静态吐司makeText (上下文的背景下,CharSequence的文字,INT持续时间)

在API级别1请只包含文本 视图标准敬酒。

参数上下文要使用的上下文。通常是您的应用程序或活动对象 。文本要显示的文本。可以是格式化文本。 持续时间显示消息的时间。无论是LENGTH_SHORT或 LENGTH_LONG

变化

Toast.makeText(getApplicationContext(), 
      v.getId(), 8000).show(); 

Toast.makeText(getApplicationContext(), 
      String.valueOf(v.getId()), Toast.LENGTH_LONG).show(); 
+0

和他为什么会得到一个ResNotFoundException? – Blackbelt

+0

你说得对,它应该是第二个参数中的String。我会编辑它。 – g00dy

相关问题