অ্যান্ড্রয়েডে অ্যাকশন বার ব্যাক বাটনকে ওভাররাইড করবেন কীভাবে?


95

আমি অ্যাকশন বারে কার্যকলাপ ব্যাক বোতামটি কাস্টমাইজ করতে চাই, হার্ড কী ব্যাক বোতামে নয়। আমি onBackPressed()পদ্ধতিটি ওভাররাইড করেছি । এটি আমার এমুলেটর ব্যাক বোতামের সাথে কাজ করে তবে অ্যাকশন বার ব্যাক বোতামের সাথে নয়।

আমি চাই এটি অ্যাকশন বারের সাথে ঘটুক। কিভাবে আমি এটি করতে পারব?

আমার কোডটি এখানে:

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

আমি এই টোস্টটি ব্যাক চাপ দিয়ে কাজ করছে কিনা তা ব্যবহার করেছি তবে প্রকৃত বাস্তবায়ন পরিবর্তনগুলি আগের ক্রিয়াকলাপে ফিরে যেতে পছন্দ করে। তবে এটি অ্যাকশন বারের শীর্ষে উপস্থিত থাকা বোতামটির সাথে কাজ করছে না (ক্রিয়াকলাপের শিরোনাম ছাড়াও)।

দয়া করে যে কেউ আমাকে সমস্যাটি নির্দিষ্ট করতে পারে।

উত্তর:


211

আমি মনে করি আপনি হোম বোতামের ক্লিক অপারেশনটিকে ওভাররাইড করতে চান। আপনি আপনার ক্রিয়াকলাপে এই জাতীয় কার্যকারিতাটিকে ওভাররাইড করতে পারেন।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}

4
নোহ ইব্রাহিম, ব্রাউজারে ব্যাক বোতামের মতো উপরের বাম কোণায় ব্যাক বাটন রয়েছে। আমি যখন সেই বোতামটিতে ক্লিক করি তখন আমি পূর্বের ক্রিয়াকলাপে ফিরে যেতে চাই। উপরে পোস্ট করা কোডটির মতো নয়।
GK

4
সুপার.অনব্যাকপ্রেসড () যোগ করুন; এটি
পুনর্নির্দেশ

4
আমি পরিবর্তিত হওয়ার পরে এটি আমার পক্ষে কাজ return true;করেছিল return super.onOptionsItemSelected(item)। এরপরে ব্যবহারকারী যখন অ্যাকশনবারের ব্যাক বোতামটি ক্লিক করেন তখন আপনি কিছু ঘটতে পারেন, তবুও বোতামটির একই কার্যকারিতাটি ধরে রাখতে পারেন।
কুমেহইমা

এই কৌশলটি দ্বারা পিছনের তীর বোতামটি দেরিতে সাড়া দিচ্ছে। এর মানে হল ইভেন্টটি চালিত হওয়ার জন্য আমাকে একটি সেকেন্ডের জন্য অপেক্ষা করতে হবে। চাপ দেওয়ার সময় এই বাটনে নির্বাচককে উপস্থিত না করা
গোপাল সিং সিরভি

আমার পক্ষে কাজ করেনি। আমি যখন ডিবাগ করলাম, তখন আমি খুঁজে পেয়েছি হোম বোতামের আইডি এবং বোতামের আইডিটি ক্লিক করা আলাদা।
ভাইপার

46

আপনি যদি অ্যাকশনবারের ব্যাক বোতামটি হার্ডওয়্যার ব্যাক বোতামের মতো আচরণ করতে চান:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }

4
কেস android.R.id.homeগুলিবর্ষণ করে না
ট্রান্সার

4
@ ট্রান্সার যদি আপনি এটি setHasOptionsMenu(true)টুকরো টুকরো ব্যবহার করেন তবে আপনার অতিরিক্তভাবে
খণ্ডটির অনক্রিট

10

দুটি বিষয় মনে রাখবেন যে ব্যবহারকারী হয় পিছনে বোতাম টিপতে বা অ্যাকশনবারের হোম বোতামটি টিপতে পারে।
সুতরাং, আপনি যদি তাকে একই গন্তব্যে পুনর্নির্দেশ করতে চান তবে আপনি এটি করতে পারেন।

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

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


কেস android.R.id.homeগুলিবর্ষণ করে না
ট্রান্সার

@ ট্রান্সার, এটি প্রায় 1.5+ বছর কেটে গেছে। এবং আমি এখন অ্যান্ড্রয়েড করি না। আমি এখন আপনাকে সাহায্য করতে পারি না। দুঃখিত
ssi-anik

তাহলে সমাধান কি?
GA1

7
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }

4
আপনি এটি একটি মন্তব্য হিসাবে যুক্ত করতে পারে। এটি কমবেশি গৃহীত উত্তরের মতোই।
সুফিয়ান

7

দুঃখিত আমার একটি দেরী উত্তর, কিন্তু অন্য যে কেউ একই পৃষ্ঠায় এই পৃষ্ঠাতে উপস্থিত, আমি উপরোক্ত চেষ্টা করেছিলাম:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

তবে এটি "পিছনে" বোতাম টিপতে ব্যর্থ হয়েছিল।

অবশেষে আমি এমন একটি পদ্ধতি পেয়েছি যা https://stackoverflow.com/a/37185334/3697478 এ আমার জন্য কাজ করেছিল যা "onSupportNavigateUp ()" ওভাররাইড করতে হয় যেহেতু আমি "অ্যাপকম্প্যাটএকটিভিটি" সমর্থন লাইব্রেরি থেকে অ্যাকশনবার ব্যবহার করছি। (নতুন অ্যাকশনবার / টুলবার লাইব্রেরির জন্য সমতুল্য "অন্যাভিগেটআপ ()" রয়েছে))

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

এবং আমি ম্যানিফেস্ট ফাইল থেকে "অ্যান্ড্রয়েড: প্যারেন্টএকটিভিটিনেম ="। মাইনএটিভিটি "বিভাগটি সরিয়েছি।


4

আমি কেবল দুটি ধাপ ব্যবহার করে এটি অর্জন করেছি,

পদক্ষেপ 1: অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এ যান এবং ট্যাগের মধ্যে প্যারামিটার যুক্ত করুন - অ্যান্ড্রয়েড: প্যারেন্টএকটিভিটির নাম = "। হোম.হোমঅ্যাক্টিভিটি"

উদাহরণ:

 <activity
    android:name=".home.ActivityDetail"
    android:parentActivityName=".home.HomeActivity"
    android:screenOrientation="portrait" />

পদক্ষেপ 2: ক্রিয়াকলাপে পূর্বের পৃষ্ঠা / ক্রিয়াকলাপের জন্য আপনার ক্রিয়া যুক্ত করুন

উদাহরণ:

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
       case android.R.id.home:
           onBackPressed();
           return true;
    }
    return super.onOptionsItemSelected(item);
 }

2

আপনি ফিরে যেতে চান একটি কার্যকলাপের পূর্ববর্তী উদাহরণস্বরূপ , ActionBar হোম বাটন এর টিপে পুনরায় ছাড়া এটা, আপনি ফিরে স্ট্যাক থেকে ব্যবহার করতে getParentActivityIntent পদ্ধতি ওভাররাইড করতে পারেন:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public Intent getParentActivityIntent() {
      return super.getParentActivityIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
}

সম্পাদনা:
এছাড়াও আপনি আপনার পিতামাতার ক্রিয়াকলাপের লঞ্চমোডটি সিঙ্গলটপে
সেট করে একই ফলাফল অর্জন করতে পারেন সুতরাং আপনার ম্যানিফেস্টে পিতামাতার ক্রিয়াকলাপে সেট করুন । অথবা আপনি ইউপি অভিপ্রায় সহ ফ্ল্যাগ_এ্যাকটিভিটি_সিএলইআরএইচপি_ ব্যবহার করতে পারেন। তথ্যসূত্র: ন্যাভিগেশন সরবরাহ করা
android:launchMode="singleTop"


2

(1) আপনার সন্তানের ক্রিয়াকলাপের জন্য পিতামাতার ক্রিয়াকলাপ যুক্ত করুন (AndroidManLive.xML)

<activity
        android:name=".ParentActivity" />

(২) সন্তানের ক্রিয়াকলাপের মধ্যে সহায়তা সাফল্য নেভিগেটআপ পদ্ধতিটি ওভাররাইড করুন

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return false;
}

0
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == android.R.id.home) {
        onBackPressed();
        return true;
    }
    //noinspection SimplifiableIfStatement
    if (id == R.id.signIn) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
///////////////////
@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

0

বারে কীভাবে ব্যাকআপ বোতাম সেটআপ করতে হয় তার বেশ কয়েকটি উপায় রয়েছে:

1) পদ্ধতিটি .setDisplayHomeAsUpEnabled(true);এটি করবে এবং তারপরে আপনি কেবল ওভাররাইড করতে পারেনandroid.R.id.home

2) <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="my.package.parrent" />অ্যান্ড্রয়েড ম্যানিফেস্টে যুক্ত করা, তবে এক্ষেত্রে আপনি অনঅপশনমেনুসলেক্টারে ওভাররাইড করতে পারবেন নাandroid.R.id.home

.. যারা আশ্চর্য তাদের কেন এটি কাজ করে না ...

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