1

私のアプリケーションでは、RealViewSwitcher内の2つの透明なボタン(これはかなりハックだと思います)の表示を切り替えようとしています。RealViewSwitcherの現在のページに基づいて可視性を変更しています。最初のボタンを機能させることはできますが、2番目のボタンがアクティブになることはありません。これが私のコードです:

///////////////

    if(realViewSwitcher.getCurrentScreen() == 0)
    {

        final Button btn1 = (Button)findViewById(R.id.btn1);

        btn1.setOnClickListener(new View.OnClickListener()
        {       
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.addCategory(Intent.CATEGORY_BROWSABLE);
                intent.setData(Uri.parse("http://www.test.com"));
                startActivity(intent);

                btn1.setVisibility(View.GONE);

            }
        });
    } 

    else if(realViewSwitcher.getCurrentScreen() == 2)
    {
        final Button btn2 = (Button)findViewById(R.id.btn2);
        btn2.setVisibility(0);

        btn2.setOnClickListener(new View.OnClickListener()
        {       
            @Override
            public void onClick(View v) 
            {

                Intent intent = new Intent(Intent.ACTION_SEND); 
                String[] tos = { "info@email.com" }; 
                intent.putExtra(Intent.EXTRA_EMAIL, tos); 
                intent.putExtra(Intent.EXTRA_TEXT, "body"); 
                intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
                intent.setType("message/rfc882"); 
                Intent.createChooser(intent, "Choose Email Client");

            }
        });
    }

    ///////////////
    //end
    /////////////////////

そしてここにxmlがあります

    <Button 
        android:id="@+id/btn1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@null"/>

    <Button 
        android:id="@+id/btn2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@null"
        android:visibility="gone"/> 
4

1 に答える 1

1

コードを少しきれいにする必要があります。

  1. まず、ボタンをフィールドとして宣言する必要があります。そのままでは、単に if ステートメントのインスタンス変数です。
  2. 同じ理由で、クリック リスナーは if ステートメントの外で宣言する必要があります。onCreate()あなたの好きな場所で、またはどこでもそれらを宣言してください。
  3. のスイッチを設定しgetCurrentWindow()ます。よりも操作が簡単if... else if... else if...です。

私が提案するかもしれません:

final Button btn1 = (Button) findViewById(R.id.btn1);
final Button btn2 = (Button )findViewById(R.id.btn2);

//Inside onCreate() or similar
btn1.setOnClickListener(new View.OnClickListener() {       
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setData(Uri.parse("http://www.test.com"));

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  //Required to start a new activity
        startActivity(intent);

        btn1.setVisibility(View.GONE);

    }
});

//In the same place
btn2.setOnClickListener(new View.OnClickListener() {       
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_SEND); 
        String[] tos = { "info@email.com" }; 
        intent.putExtra(Intent.EXTRA_EMAIL, tos); 
        intent.putExtra(Intent.EXTRA_TEXT, "body"); 
        intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
        intent.setType("message/rfc882"); 
        Intent.createChooser(intent, "Choose Email");
        btn2.setVisibility(View.VISIBLE);
    }
});

//Later, in your other functional code
switch (realViewSwitcher.getCurrentScreen()) {
    case 0:
        //do your stuff
        break;
    case 2:
        //other stuff
        break;
    default: //If you need it
        throw new Exception("Oops...");
}
于 2012-04-16T23:29:50.467 に答える