কীভাবে বোতামটি টিপতে ক্রিয়াকলাপটি লোড হওয়া থেকে আটকাতে হবে


96

আমি প্রথম ক্লিকের পরে তাত্ক্ষণিকভাবে বোতামটি দু'বার চাপলে কার্যকলাপটি দু'বার লোড হওয়া থেকে রোধ করার চেষ্টা করছি।

আমার একটি ক্রিয়াকলাপ রয়েছে যা বোতামের ক্লিকে লোড হয়, বলুন

 myButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
       //Load another activity
    }
});

এখন লোড করা ক্রিয়াকলাপে নেটওয়ার্ক কল রয়েছে বলে লোড করতে (এমভিসি) কিছুটা সময় নেয়। আমি এটির জন্য লোডিং ভিউটি দেখাই তবে আমি এর আগে দু'বার বোতাম টিপলে আমি দেখতে পাচ্ছি যে কার্যকলাপটি দুটিবার লোড হচ্ছে load

কেউ কীভাবে এটি প্রতিরোধ করতে জানেন?


আপনি ক্রিয়াকলাপটি খোলার পরে বোতামটি অক্ষম করতে পারেন ... এবং যখন কার্যকলাপ শেষ হয়, এটি আবার সক্ষম করুন ... আপনি অ্যাক্টিভিটিস রেজাল্ট ফাংশনে কল করে দ্বিতীয় ক্রিয়াকলাপের সমাপ্তি সনাক্ত করতে পারেন
মনীশ

প্রথমবার ক্লিক করা হলে বোতামটি অক্ষম করুন এবং আপনি যখন আবার বোতামটি আবার ক্লিক করতে চান কেবল তখনই এটি পুনরায় সক্ষম করুন।
জিমিবি

অক্ষম করা খুব সহজ পদ্ধতিতে কাজ করে না যদি খুব পরের বিবৃতিটি কিছু দীর্ঘ প্রক্রিয়া বা ক্রিয়াকলাপ শুরু হওয়ার জন্য হয় ... বোতামটি অক্ষম করতে আপনাকে অবশ্যই আলাদা থ্রেড তৈরি করতে হবে ...
আওস তারিক


উত্তর:


69

বোতামের ইভেন্ট শ্রোত্রে, বোতামটি অক্ষম করুন এবং অন্য ক্রিয়াকলাপটি দেখান।

    Button b = (Button) view;
    b.setEnabled(false);

    Intent i = new Intent(this, AnotherActitivty.class);
    startActivity(i);

onResume()বোতামটি পুনরায় সক্ষম করতে ওভাররাইড করুন ।

@Override
    protected void onResume() {
        super.onResume();

        Button button1 = (Button) findViewById(R.id.button1);
        button1.setEnabled(true);
    }

4
এটি সঠিক পদ্ধতির। এমনকি এটি আপনার জন্য বাটন নির্বাচিত রাজ্যগুলি হ্যান্ডেল করবে (যদি আপনি সেগুলি সরবরাহ করেন) এবং সমস্ত মেটাল ডিজাইন "গুডিজ" আপনি সাধারণ স্ট্যান্ডার্ড উইজেট থেকে আশা করতে পারেন। আমি বিশ্বাস করতে পারি না লোকেরা এর জন্য টাইমার ব্যবহার করে। তারপরে আপনি এই জাতীয় জিনিসগুলি হ্যান্ডেল করার জন্য অদ্ভুত গ্রন্থাগারগুলি দেখা শুরু করেন ...
মার্টিন মার্ককোসিনি

158

এটিকে আপনার Activityসংজ্ঞায় যুক্ত করুন AndroidManifest.xml...

android:launchMode = "singleTop"

উদাহরণ স্বরূপ:

<activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar"
            android:launchMode = "singleTop"/>

ঠিক আছে আমার ধারণা আপনি নতুন ক্রিয়াকলাপ শুরু করার পরে কিছুটা দীর্ঘ প্রক্রিয়াজাতকরণ করছেন .. এজন্য পর্দাটি কালো হয়ে গেছে out এখন আপনি যদি সেই কালো পর্দা এড়াতে চান তবে আপনার ক্রিয়াকলাপের শুরুতে একটি অগ্রগতি ডায়ালগ প্রদর্শন করা উচিত এবং দীর্ঘ প্রসেসিংটি আলাদা থ্রেডে করা উচিত (অর্থাত্ ইউআই থ্রেড বা সিম্পল অ্যাসিঙ্ক ক্লাস ব্যবহার করুন)। আপনার প্রসেসিং হয়ে গেলে সেই ডায়ালগটি লুকান। এটি আমার জ্ঞানের সেরা সমাধান এবং আমি এটি বেশ কয়েকবার ব্যবহার করেছি ... :)
আওস তারিক

আমার কাছে ডায়ালগটি দেখাতে হবে। তবে হ্যাঁ, অনক্রিটটিতে আমার কাছে একটি পদ্ধতি নির্দেশক ওয়েব রয়েছে। তবে এটাই কি একমাত্র সমাধান? কারণ এই মুহুর্তে, আমি থ্রেড এবং সবগুলি পরিবর্তন না করেই পরিচালনা করতে চাই। সুতরাং আপনি কি অন্যান্য সম্ভাব্য উপায় জানেন? এবং আমি আমার তালিকার অ্যাডাপ্টারের বোতামটি রেখেছি এবং এটির জন্য পদ্ধতিটি
xML

4
আর কি সম্ভব ??? একটি উপায় বা অন্য কোনও উপায় আপনাকে অবশ্যই মসৃণ দেখতে অ্যাপ্লিকেশন পেতে থ্রেডিং বাস্তবায়ন করতে হবে ... চেষ্টা করুন ডুড ..;) কেবল একটি বর্তমান পদ্ধতিতে সমস্ত বর্তমান কোডটি রেখে সেই পদ্ধতিটিকে আলাদা থ্রেড থেকে একই জায়গায় কল করুন যেখানে আপনি লিখেছেন এর আগে ... এটি কোডের পাঁচ থেকে ছয়টি লাইন খুব কমই বাড়িয়ে দেবে ..
আওস তারিক

19
এটি বিদ্যমান থেকে দুটি ক্রিয়াকলাপ প্রতিরোধ করে, তবে এটি কোডটি ভুলভাবে দুটিবার চালানো থেকে বিরত রাখে না। ভোট গ্রহণ কম হওয়া সত্ত্বেও গৃহীত উত্তরটি ভাল।
লিলবির্ডি

18
এটি ভুল, এটি ক্রিয়াকলাপটি কখনও কখনও দু'বার অস্তিত্বহীন করে তোলে, এমনকি বিভিন্ন কাজেও। সঠিক android:launchMode = "singleTop"উপায়টি হ'ল, যা অ্যান্ড্রয়েড মাল্টিটাস্কিং না ভেঙে প্রভাব অর্জন করে। ডকুমেন্টেশনটিতে বলা হয়েছে যে বেশিরভাগ অ্যাপ্লিকেশনগুলির singleInstanceবিকল্পটি ব্যবহার করা উচিত নয় ।
নোহস

37

আপনি এর মতো অভিপ্রায়ের পতাকা ব্যবহার করতে পারেন।

Intent intent = new Intent(Class.class);    
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);

এটি ইতিহাসের স্ট্যাকের শীর্ষে কেবলমাত্র একটি ক্রিয়াকলাপ উন্মুক্ত করে তুলবে।


4
সর্বাধিক উত্সাহিত উত্তরের সাথে মিলিত এই উত্তরটি সেরা কাজ করে বলে মনে হচ্ছে। ক্রিয়াকলাপের ম্যানিফেস্টে এই পতাকাটি ব্যবহার করুন android:launchMode = "singleTop":, প্রতিটি ইন্টেন্টে পতাকা যুক্ত না করেই এটি সমাধান হয়ে যায়।
নোহস

4
আপনার নেস্টেড ক্রিয়াকলাপগুলির প্রয়োজন হলে এটি কার্যকর হয় না, কারণ আপনার দুটি একই ধরণের ক্রিয়াকলাপ থাকতে পারে না।
বেহনম হায়দারী

4
এটি স্টার্টঅ্যাক্টিভিটি ফর রিসাল্টের ক্ষেত্রে কাজ করছে না
রাজ

27

যেহেতু এসও আমাকে অন্য উত্তরগুলিতে মন্তব্য করতে দেয় না, তাই আমাকে একটি নতুন উত্তর দিয়ে এই থ্রেডটিকে দূষিত করতে হবে।

"ক্রিয়াকলাপটি দু'বার খোলে" সমস্যার সাধারণ উত্তর এবং এই সমাধানগুলির সাথে আমার অভিজ্ঞতা (অ্যান্ড্রয়েড .1.১.১):

  1. ক্রিয়াকলাপ শুরু হওয়া বোতামটি অক্ষম করুন: কাজ করে তবে কিছুটা আনাড়ি অনুভব করে। আপনার অ্যাপে ক্রিয়াকলাপ শুরু করার একাধিক উপায় থাকলে (উদাহরণস্বরূপ অ্যাকশন বারের একটি বোতাম এবং তালিকা ভিউতে কোনও আইটেম ক্লিক করে), আপনাকে একাধিক জিইউআই উপাদানগুলির সক্ষম / অক্ষম অবস্থার উপর নজর রাখতে হবে। এছাড়াও উদাহরণস্বরূপ, তালিকা ভিউতে ক্লিক করা আইটেমগুলি অক্ষম করা খুব সুবিধাজনক নয়। সুতরাং, খুব সার্বজনীন পদ্ধতির নয়।
  2. লঞ্চমোড = "সিঙ্গলইনস্ট্যান্স": স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট () এর সাথে কাজ করছে না, স্টার্টঅ্যাক্টিভিটি () দিয়ে ব্যাক নেভিগেশন বিরতি দেয়, অ্যান্ড্রয়েড ম্যানিফেস্ট ডকুমেন্টেশনের দ্বারা নিয়মিত অ্যাপ্লিকেশনগুলির জন্য প্রস্তাবিত নয়।
  3. লঞ্চমোড = "সিঙ্গেল টাস্ক": স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট () এর সাথে কাজ করছে না, অ্যান্ড্রয়েড ম্যানিফেস্ট ডকুমেন্টেশন দ্বারা নিয়মিত অ্যাপ্লিকেশনগুলির জন্য প্রস্তাবিত নয়।
  4. FLAG_ACTIVITY_REORDER_TO_FRONT: ব্রেক ব্যাক বোতাম।
  5. FLAG_ACTIVITY_SINGLE_TOP: কাজ করছে না, ক্রিয়াকলাপ এখনও দু'বার খোলা হয়েছে।
  6. FLAG_ACTIVITY_CLEAR_TOP: এই একমাত্র আমার পক্ষে কাজ করছে।

সম্পাদনা: এটি স্টার্টঅ্যাক্টিভিটি () দিয়ে কার্যক্রম শুরু করার জন্য ছিল। স্টার্টঅ্যাক্টিভিটি ফর রিসাল্ট () ব্যবহার করার সময় আমাকে FLAG_ACTIVITY_SINGLE_TOP এবং FLAG_ACTIVITY_CLEAR_TOP উভয় সেট করতে হবে।


FLAG_ACTIVITY_CLEAR_TOP: অ্যান্ড্রয়েড .1.১.১- এ আমার পক্ষে কাজ করা একমাত্র
মিংজিয়াং শি

4
আমি "FLAG_ACTIVITY_REORDER_TO_FRONT" ব্যবহার করছি এবং এটি ঠিক কাজ করছে এবং পিছনে বোতামটিও স্বাভাবিক কাজ করে। "ব্রেক ব্যাক বোতাম" বলতে আসলে কী বোঝাতে চেয়েছিলেন? আপনি কি এই বিষয়ে স্পষ্ট করতে পারেন?
মিরমুখসিন সোদিকভ

আমি দেখেছি যে "পুনর্বিন্যাস" ফ্ল্যাগ একটি বাগ ছিল ... এবং এটা ছিল না পুনঃক্রমবিন্যাস কিটক্যাট হবে। তবে, আমি এটি ললিপপ এবং পাইতে যাচাই করেছি, এটি ঠিকঠাক কাজ করছে।
মিরমুখসিন সোডিকভ

9

এটি কেবল তখনই আমার জন্য কাজ করছিল startActivity(intent)

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

4
@raj আপনি কি android:launchMode = "singleInstance"আপনার কার্যকলাপ ট্যাগের ম্যানিফেস্ট ফাইলটিতে এটি যোগ করে চেষ্টা করেছেন ?
শৈলেন্দ্র মাদদা

5

দু'বার অনুরোধ করার জন্য ক্রিয়াকলাপ এড়ানোর জন্য সিঙ্গলআইন্সট্যান্স ব্যবহার করুন।

<activity
            android:name=".MainActivity"
            android:label="@string/activity"
            android:launchMode = "singleInstance" />

4

ধরা যাক @wannik ঠিক আছে তবে আমাদের যদি একই অ্যাকশন শ্রোতাদের কল করার জন্য 1 টিরও বেশি বোতাম থাকে এবং আমি পরবর্তী ক্রিয়াকলাপ শুরু করার আগে প্রায় একই সময়ে একবার দুটি বোতামে ক্লিক করি ...

সুতরাং আপনার যদি ক্ষেত্র private boolean mIsClicked = false;এবং শ্রোতার মধ্যে থাকে তবে এটি ভাল :

if(!mIsClicked)
{
    mIsClicked = true;
    Intent i = new Intent(this, AnotherActitivty.class);
    startActivity(i);
}

এবং onResume()আমাদের রাষ্ট্রটি ফিরিয়ে দিতে হবে:

@Override
protected void onResume() {
    super.onResume();

    mIsClicked = false;
}

আমার এবং @ ভানিকের উত্তরের মধ্যে পার্থক্য কী?

যদি আপনি এর শ্রোতার কাছে মিথ্যাতে সক্ষম হয়ে থাকেন তবে একই শ্রোতার ব্যবহার করে অন্য বোতামটি দেখায় calling সুতরাং শ্রোতার ক্রিয়াটি দু'বার না বলা হয়েছে তা নিশ্চিত করার জন্য আপনার কাছে এমন কিছু বৈশ্বিক প্রয়োজন থাকা দরকার যা শ্রোতার সমস্ত কলিং অক্ষম করে (এটি নতুন উদাহরণ বা না হলে কিছু মনে হয় না)

আমার উত্তর এবং অন্যদের মধ্যে পার্থক্য কি?

তারা সঠিকভাবে চিন্তা করছে তবে তারা কলিং ক্রিয়াকলাপের একই ঘটনায় ভবিষ্যতে ফিরে আসার জন্য চিন্তা করছে না :)


সার্ভোপার, আপনার গবেষণার জন্য আপনাকে ধন্যবাদ। এই প্রশ্নটি ইতিমধ্যে সমাধান করা হয়েছে, আপনার উত্তরটি আপনি যে পরিস্থিতিটি বলেছেন তার জন্য আশাব্যঞ্জক বলে মনে হয়। আমার চেষ্টা করুন এবং ফলাফলটি আসুন :)
তেজস

4
আমার একটি গেমটিতে আমার এই সমস্যাটি রয়েছে। আমার কাছে "নির্বাচিত স্তর" বালুন রয়েছে যা একই শ্রোতা এবং ভিউ ট্যাগের দ্বারা পৃথক different সুতরাং আমি যদি দ্রুত দুটি বালুন চয়ন করি তবে এটি দুটি ক্রিয়াকলাপ শুরু করে। আমি জানি যেহেতু নতুন ক্রিয়াকলাপটি শব্দ শুরু হয় .. এবং এই ক্ষেত্রে শব্দটি দু'বার বাজানো হয় ... তবে আপনি এটি আবার ক্লিক করে পরীক্ষা করতে পারেন যা আপনাকে পূর্ববর্তী ক্রিয়াকলাপে
ডেকে আনবে

4
এটি যথেষ্ট নয়। আপনার synchronized(mIsClicked) {...}100% নিরাপদ থাকার জন্য আপনাকে পাশাপাশি ব্যবহার করতে হবে।
মনস্টিওর

@ মনস্টিওর আপনার একটি সিঙ্ক্রোনাইজড ব্লকের দরকার নেই কারণ এগুলি সবই মূল থ্রেড…
মার্টিন মার্কনকিনি

@ মার্টিনমারকনসিনি এটি কেবলমাত্র কোনও অ্যান্ড্রয়েড ক্রিয়াকলাপে সুরক্ষিত থাকার কারণে এটি ভাল কোড তৈরি করে না। এটি যদি স্বতন্ত্র শ্রেণি হয় তবে এটি থ্রেড নিরাপদ নয় বলে নথিভুক্ত করতে হবে।
মনস্টিওর

4

এই পরিস্থিতির জন্য, আমি singleTaskক্রিয়াকলাপ.এক্সএমএল বা ক্রিয়াকলাপের onResume()onDestroy()পদ্ধতিতে একটি পতাকা যথাক্রমে দু'এর একটিতে গিয়েছি ।

জন্য প্রথম সমাধান: আমি ব্যবহার করতে পছন্দ singleTaskবদলে ম্যানিফেস্টে কার্যকলাপের জন্য singleInstanceব্যবহার অনুযায়ী singleInstanceআমি মূর্ত আউট যে কিছু অনুষ্ঠান কার্যকলাপ নিজেই জন্য একটি নতুন পৃথক উদাহরণস্বরূপ যা চলমান অ্যাপগুলির একটি দুটি পৃথক অ্যাপ্লিকেশন উইন্ডো আছে ফলে তৈরি বেকাকগ্রাউন্ডে এবং অতিরিক্ত মেমরির বরাদ্দের পাশাপাশি ব্যবহারকারীরা অ্যাপ্লিকেশন ভিউটি আবার চালু করার জন্য কিছু অ্যাপ্লিকেশন বেছে নেওয়ার জন্য খুব খারাপ ব্যবহারকারীর অভিজ্ঞতার ফলস্বরূপ। সুতরাং, আরও ভাল উপায় হ'ল নিম্নলিখিতটিগুলির মতো ম্যানিফেস্ট.এক্সএমএলে কার্যকলাপটি সংজ্ঞায়িত করা হয়:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask"</activity>

আপনি এখানে কার্যকলাপ লঞ্চ মোড চেক করতে পারেন ।


জন্য দ্বিতীয় সমাধান, আপনি শুধু একটি স্ট্যাটিক পরিবর্তনশীল বা পক্ষপাত পরিবর্তনশীল, উদাহরণস্বরূপ সংজ্ঞায়িত করতে হবে:

public class MainActivity extends Activity{
    public static boolean isRunning = false;

    @Override
    public void onResume() {
        super.onResume();
        // now the activity is running
        isRunning = true;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        // now the activity will be available again
        isRunning = false;
    }

}

এবং অন্য দিক থেকে যখন আপনি এই ক্রিয়াকলাপটি চালু করতে চান, কেবলমাত্র দেখুন:

private void launchMainActivity(){
    if(MainActivity.isRunning)
        return;
    Intent intent = new Intent(ThisActivity.this, MainActivity.class);
    startActivity(intent);
}

3

আমি মনে করি আপনি সমস্যার সমাধান করছেন। সাধারণত এটা একটি কার্যকলাপ তার সূচনার জীবনচক্র পদ্ধতি (কোন দীর্ঘক্ষন ধরে চলা ওয়েব অনুরোধ উপার্জন করা হবে একটি খারাপ ধারণা onCreate(), onResume()ইত্যাদি)। সত্যিই এই পদ্ধতিগুলি আপনার ক্রিয়াকলাপটি ব্যবহার করবে এমন অবজেক্টগুলি ইনস্ট্যান্টিয়েট করতে এবং আরম্ভ করতে ব্যবহার করা উচিত এবং তাই তুলনামূলক দ্রুত হওয়া উচিত।

যদি আপনাকে ওয়েব অনুরোধ সম্পাদন করা দরকার হয় তবে আপনার সদ্য চালু হওয়া কার্যকলাপের ব্যাকগ্রাউন্ড থ্রেডে এটি করুন (এবং নতুন ক্রিয়াকলাপে লোডিং ডায়ালগটি দেখান)। একবার ব্যাকগ্রাউন্ড অনুরোধের থ্রেডটি সম্পূর্ণ হয়ে গেলে এটি ক্রিয়াকলাপ আপডেট করে এবং ডায়ালগটি আড়াল করতে পারে।

এর অর্থ হল আপনার নতুন ক্রিয়াকলাপটি তাত্ক্ষণিকভাবে চালু হওয়া উচিত এবং ডাবল ক্লিকটিকে সম্ভব হওয়া থেকে রোধ করা উচিত।


3

আশাকরি এটা সাহায্য করবে:

 protected static final int DELAY_TIME = 100;

// to prevent double click issue, disable button after click and enable it after 100ms
protected Handler mClickHandler = new Handler() {

    public void handleMessage(Message msg) {

        findViewById(msg.what).setClickable(true);
        super.handleMessage(msg);
    }
};

@Override
public void onClick(View v) {
    int id = v.getId();
    v.setClickable(false);
    mClickHandler.sendEmptyMessageDelayed(id, DELAY_TIME);
    // startActivity()
}`

2

অন্যান্য খুব খুব সহজ সমাধান যদি আপনি না চান তবে onActivityResult()2 সেকেন্ডের জন্য বাটনটি নিষ্ক্রিয় করা (বা আপনি চাইলে সময়), আদর্শ নয়, তবে কিছুটা সমস্যা সমাধান করতে পারেন এবং কোডটি সহজ:

   final Button btn = ...
   btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            //start activity here...
            btn.setEnabled(false);   //disable button

            //post a message to run in UI Thread after a delay in milliseconds
            btn.postDelayed(new Runnable() {
                public void run() {
                    btn.setEnabled(true);    //enable button again
                }
            },1000);    //1 second in this case...
        }
    });

2

// ইভেন্টের সময় ট্র্যাক করতে পরিবর্তনশীল

private long mLastClickTime = 0;

২.অনক্লিকের মধ্যে চেক করুন যে যদি বর্তমান সময় এবং শেষ ক্লিকের সময়ের পার্থক্যটি আমি দ্বিতীয় সেকেন্ডের চেয়ে কম হয় তবে কিছুই করতে হবে না (রিটার্ন) অন্য ক্লিক ক্লিকের জন্য যান না

 @Override
public void onClick(View v) {
    // Preventing multiple clicks, using threshold of 1 second
    if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
        return;
          }
    mLastClickTime = SystemClock.elapsedRealtime();
            // Handle button clicks
            if (v == R.id.imageView2) {
        // Do ur stuff.
         }
            else if (v == R.id.imageView2) {
        // Do ur stuff.
         }
      }
 }

1

ক্লিকের পদ্ধতিতে বোতামে কেবল একটি পতাকা বজায় রাখুন:

সর্বজনীন বুলিয়ান oneTimeLoadActivity = মিথ্যা;

    myButton.setOnClickListener(new View.OnClickListener() {
          public void onClick(View view) {
               if(!oneTimeLoadActivity){
                    //start your new activity.
                   oneTimeLoadActivity = true;
                    }
        }
    });

1

ক্লিক করার পরে দুবার ক্রিয়াকলাপ না খোলার জন্য ম্যানিফেস্টে লঞ্চ মোডটিকে একক টাস্ক হিসাবে যুক্ত করুন

<activity
        android:name=".MainActivity"
        android:label="@string/activity"
        android:launchMode = "singleTask" />

0

আপনি যদি অ্যাক্টিভিটি রেজাল্ট ব্যবহার করেন তবে আপনি রাষ্ট্র সংরক্ষণের জন্য একটি পরিবর্তনশীল ব্যবহার করতে পারেন।

private Boolean activityOpenInProgress = false;

myButton.setOnClickListener(new View.OnClickListener() {
  public void onClick(View view) {
    if( activityOpenInProgress )
      return;

    activityOpenInProgress = true;
   //Load another activity with startActivityForResult with required request code
  }
});

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if( requestCode == thatYouSentToOpenActivity ){
    activityOpenInProgress = false;
  }
}

ব্যাক বোতামে চাপ দিয়ে কাজ করে কারণ অনুরোধ কোড ইভেন্টে ফিরে আসে।


-1
myButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
      myButton.setOnClickListener(null);
    }
});

এটি সম্ভবত কার্যকর হবে না যেহেতু আপনাকে এটিকে চূড়ান্ত হিসাবে ঘোষণা করতে হবে।
কিং

-1

flagএটি একটি ভেরিয়েবল সেট ব্যবহার করুন to true, এটির জন্য ঠিক কী returnঅন্যটি অ্যাক্টিভিটি কল সম্পাদন করে তা পরীক্ষা করে দেখুন ।

আপনি অ্যাক্টিভিটি কল কার্যকর করে সেটকলিকেবল (মিথ্যা) ব্যবহার করতে পারেন

flg=false
 public void onClick(View view) { 
       if(flg==true)
         return;
       else
       { flg=true;
        // perform click}
    } 

perform click; wait; flg = false;যখন আমরা ফিরে আসব
জেনো লুপাস

-1

আপনি কেবল স্টার্টঅ্যাক্টিভিটি ফর রিসাল্টকে ওভাররাইড করতে পারেন এবং উদাহরণ ভেরিয়েবলটি ব্যবহার করতে পারেন:

boolean couldStartActivity = false;

@Override
protected void onResume() {
    super.onResume();

    couldStartActivity = true;
}

@Override
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
    if (couldStartActivity) {
        couldStartActivity = false;
        intent.putExtra(RequestCodeKey, requestCode);
        super.startActivityForResult(intent, requestCode, options);
    }
}

-4

আপনি এটি চেষ্টা করতে পারেন

Button game = (Button) findViewById(R.id.games);
        game.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View view) 
            {
                Intent myIntent = new Intent(view.getContext(), Games.class);
                startActivityForResult(myIntent, 0);
            }

        });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.