2013-07-04 185 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

相關問題