1

私はアンドロイドが初めてで、あなたの助けが必要です。

アクティビティに 5 つのボタンがあります。さまざまなアクティビティにつながる各ボタン。各ボタンをクリックすると、データベース挿入機能を実行するアクティビティにつながり、ユーザーが戻ると、5 つのボタンが残るメイン アクティビティにつながります。

今、私が欲しいのは、ユーザーの混乱を避けるために、ユーザーが既にクリックしたボタンを知ってもらいたいということです。つまり、各ボタンによって導かれるアクティビティへの挿入が完了したら、ボタンを無効にしたいと考えています。

これは私が試したものです:

public class ResourcesActivity extends Activity {
    static boolean isBtnVenueClikced = false; {


        public void buttonListeners() {
            venue_btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    isBtnVenueClikced = true;
                    Log.i("In button venue click isBtnVenueClikced ", isBtnVenueClikced + "");
                    Intent venue_intent = new Intent(getApplicationContext(), VenueActivity.class);
                    venue_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(venue_intent);

                }


            });
            food_cost_btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Log.i("In Food Button isBtnVenueClikced ", isBtnVenueClikced + "");
                    //isBtnFoodClicked = true;
                    Intent food_intent = new Intent(getApplicationContext(), FoodAndBeveragesActivity.class);
                    food_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(food_intent);

                }
            });
            accomodation_btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    //isBtnAccClicked = true;
                    Intent accomodation_intent = new Intent(getApplicationContext(), AccomodationActivity.class);
                    accomodation_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(accomodation_intent);

                }
            });
            guest_details_btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    //isBtnGuestClicked = true;
                    Intent guest_details_intent = new Intent(getApplicationContext(), GuestDetailsActivity.class);
                    guest_details_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(guest_details_intent);

                }
            });
            miscl_btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    //isBtnOtheClicked = true;
                    Intent others_intent = new Intent(getApplicationContext(), OthersActivity.class);
                    others_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(others_intent);

                }
            });
        }

        @Override
        protected void onResume() {
            // TODO Auto-generated method stub
            super.onResume();
            Log.i("In onResume isBtnVenueClikced ", isBtnVenueClikced + "");
            //checkcliks();
            //isBtnVenueClikced = false;
            if (isBtnVenueClikced == false) {
                venue_btn.setEnabled(true);
            } else {
                venue_btn.setEnabled(false);
            }


        }
    }  
4

3 に答える 3

1

startActivityForResult(intent, requestCode);クリックされたボタンのリクエストコードでアクティビティを開始するときにメソッドを使用します。そして、戻ってきたときの2番目のアクティビティでは、設定しただけですsetResult(RESULT_OK);。つまり、2番目のアクティビティではすべてが正常であり、最初のアクティビティでも、コールバックメソッドの結果が得られます。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
    }

したがって、リクエストコードを確認することで、このメソッドのボタンを無効にできます。

これがお役に立てば幸いです

編集:

最初に次のような5つの定数を取ります

private final int VENUE_BUTTON_REQUEST_CODE = 0;

クリックリスナーで

venue_btn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                   Intent venue_intent = new Intent(getApplicationContext(), VenueActivity.class);
                    venue_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivityForResult(venue_intent,VENUE_BUTTON_REQUEST_CODE);

                }


            });

そしてあなたのコールバックメソッドでこのようにします

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if(requestCode == VENUE_BUTTON_REQUEST_CODE){
     venue_btn.setEnable(false);
      }
        super.onActivityResult(requestCode, resultCode, data);
    }
于 2013-02-14T05:42:43.057 に答える
0

さてあなたが試すことができる簡単な解決策があります

ユーザーがボタンをクリックすると、共有設定に入力して、ユーザーがクリックしたボタンを通知できます。

例えば

food_cost_btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        Log.i("In Food Button isBtnVenueClikced ", isBtnVenueClikced + "");

        context.getSharedPreferences("myPref", Context.MODE_PRIVATE).edit()
            .putBoolean("food_cost_btn", true).commit();

        Intent food_intent = new Intent(getApplicationContext(), FoodAndBeveragesActivity.class);
        food_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(food_intent);

    }
}); 

そしてonResumeの中にあなたは以下を書くでしょう。

if (context.getSharedPreferences("myPref", Context.MODE_PRIVATE)).getBoolean("food_cost_btn", false)) {
    food_cost_btn.setEnabled(false);
}   
于 2013-02-14T05:45:33.170 に答える
0

このように配列内の 5 つのボタンすべてを取得します

Buttons[] buttons={venu_btn,foodcost_btn,accomadation_btn,guest_detail_btn,misc_btn};

すべてのonclickリスナーで共通のタスクを実行しているので、最初にコードを減らしましょう...

別の配列を取るために

Class[] classes={VenueActivity.class,FoodAndBeveragesActivity.class,AccomodationActivity.class,GuestDetailsActivity.class,OthersActivity.class};

// onclick リスナーを設定

for(int i=0;i<buttons.length;i++)
{
buttons[i].setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent commonintent = new Intent(getApplicationContext(),classes[i]);
            others_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
//send selected class index that is i
             commonintent.putExtra("index",String.valueOf(i));
            startActivity( commonintent);
        }
    });
}

アクティビティで、アクティビティから戻るときに文字列エクストラを使用してインデックスを取得します。//sharedPreference を使用して保存することもできますが、インテント エクストラを使用することをお勧めします。

  String index=getIntent().getExtras().getString("index");
    if(index!=null && index.length!=null)
    {
    int i=Integer.parseInt(index);
    buttons[i].setEnable(false);
    }
于 2013-02-14T05:49:14.683 に答える