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 个我可以成功完成的按钮。如何向这些按钮添加点击事件?运行时,我得到 Resource Not found例外。

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)

我按照下面的链接给出了这个链接。我在这段代码中缺少什么?

如何识别从动态生成的表中单击的按钮

4

4 回答 4

3

改变

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

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

如果您将一个 int 值作为第二个参数传递给makeTextandroid 将寻找一个带有该int 的idString R.string。如果它不存在,您的应用程序将崩溃android.content.res.Resources$NotFoundException:

于 2013-07-04T07:05:33.147 回答
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)

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

参数

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()).

于 2013-07-04T07:06:52.580 回答
1

改变

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

Toast.makeText(getApplicationContext(),
                    v.getId().toString(), 8000).show();
于 2013-07-04T07:08:11.767 回答
1

我想我在这里找到了它:

公共静态 Toast makeText(上下文上下文,int resId,int 持续时间)

在 API 级别 1 中添加 制作一个标准 toast,其中仅包含一个文本视图,其中包含来自资源的文本。

参数 context 要使用的上下文。通常是您的 Application 或 Activity 对象。resId 要使用的字符串资源的资源 ID。可以是格式化文本。duration 显示消息的时间。LENGTH_SHORT或 LENGTH_LONG如果找不到资源则抛出。Resources.NotFoundException 公共静态 Toast makeText(上下文上下文,CharSequence 文本,int 持续时间)

在 API 级别 1 中添加 制作仅包含文本视图的标准 toast。

参数 context 要使用的上下文。通常是您的 Application 或 Activity 对象。text 要显示的文本。可以是格式化文本。duration 显示消息的时间。LENGTH_SHORT 或 LENGTH_LONG

改变

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

    Toast.makeText(getApplicationContext(),
            String.valueOf(v.getId()), Toast.LENGTH_LONG).show();
于 2013-07-04T07:14:55.750 回答