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)

以下のリンクをたどりました。このコードに何が欠けていますか?

動的に生成されたテーブルからクリックされたボタンを識別する方法

4

4 に答える 4

3

変化する

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

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

int 値を 2 番目のパラメーターとしてmakeTextandroid に渡すと、そのid内部の文字列が検索され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)

リソースからのテキストを含むテキスト ビューのみを含む標準的なトーストを作成します。

パラメーター

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

ここで見つけたと思います:

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

API レベル 1 で追加 リソースからのテキストを含むテキスト ビューのみを含む標準のトーストを作成します。

パラメータ context 使用するコンテキスト。通常は Application または Activity オブジェクトです。resId 使用する文字列リソースのリソース ID。書式設定されたテキストにすることができます。duration メッセージを表示する期間。リソースが見つからない場合は、LENGTH_SHORT または LENGTH_LONGのいずれかがスローされます。Resources.NotFoundException public static Toast makeText (コンテキスト コンテキスト、CharSequence テキスト、int 期間)

API レベル 1 で追加 テキスト ビューのみを含む標準的なトーストを作成します。

パラメータ 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 に答える