অবজ্ঞাত android.support.v4.app.ActionBarDrawerToggle- কে কীভাবে প্রতিস্থাপন করবেন


127

গতকাল (17-10-2014) আমি আপডেট অ্যান্ড্রয়েড SDK এর আছে এবং support-library-v4.jarআমার অ্যাপ্লিকেশানের, এখন থামিয়ে দেওয়া এর সাথে সম্পর্কিত সর্তকবার্তা পান ActionBarDrawerToggle, পড়ার ডকুমেন্টেশন বলে মনে হয় আমি ব্যবহার করতে হবে ActionBarDrawerTogglesupport-library-v7.appcompact.jar

এখানে আমার ক্রিয়াকলাপের কিছু অংশ যা প্রাসঙ্গিক হতে পারে:

import android.app.ActionBar;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;


public class MyActivity extends FragmentActivity {
    private ActionBar bar;
    private CustomActionBarDrawerToggle mDrawerToggle;
    private DrawerLayout mDrawer;
    private ListView mDrawerList;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_infoviewer);

        bar = this.getActionBar();

        bar.setDisplayHomeAsUpEnabled(true);

        bar.setHomeButtonEnabled(true);
        bar.setDisplayShowTitleEnabled(false);
        mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);

        mDrawer.setBackgroundColor(getResources().getColor(R.color.White));
        initNavMenu();
        try {
            mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer);
        } catch (RuntimeException e) {
            e.printStackTrace();
        }

        mDrawer.setDrawerListener(mDrawerToggle);
    }

    ....

    private void initNavMenu() {
        NavMenuAdapter mAdapter = MyDrawers.getDefaultDrawer(MyActivity.this, true);
        mDrawerList = (ListView) findViewById(R.id.drawer);
        mDrawerList.setBackgroundColor(getResources().getColor(R.color.GreenMoneyDark));
        if (mDrawerList != null) mDrawerList.setAdapter(mAdapter);
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener(MyActivity.this, mDrawer, mDrawerList));
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {

        public CustomActionBarDrawerToggle(Activity mActivity,
                                           DrawerLayout mDrawerLayout) {
            super(mActivity, mDrawerLayout, R.drawable.action_drawer,
                    R.string.ns_menu_open, R.string.ns_menu_close);
        }

        @Override
        public void onDrawerClosed(View view) {
            bar.setTitle(getString(R.string.ns_menu_close));
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            bar.setTitle(getString(R.string.ns_menu_open));
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    }

}

আমি সমর্থন-লাইব্রেরি-ভি 7 অনুলিপি করে প্রতিস্থাপন করার চেষ্টা করেছি

import android.support.v4.app.ActionBarDrawerToggle;

সঙ্গে

 import android.support.v7.app.ActionBarDrawerToggle;

এটি সংকলনের সমস্যা সৃষ্টি করেছে

 public CustomActionBarDrawerToggle(Activity mActivity,
                                               DrawerLayout mDrawerLayout) {
                super(mActivity, mDrawerLayout, R.drawable.action_drawer,
                        R.string.ns_menu_open, R.string.ns_menu_close);
            }

তাই আমি প্রতিস্থাপন করতে চেষ্টা করেছি R.drawable.action_drawerসঙ্গে

public CustomActionBarDrawerToggle(Activity mActivity,
                                           DrawerLayout mDrawerLayout) {
            super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
                    R.string.ns_menu_open, R.string.ns_menu_close);
        }

এটি সংকলন করে তবে রানটাইমের সাথে ক্রাশ হয়

 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$attr;
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:190)
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:186)

নোট যে android-support-v7-appcompat.jarপ্রকল্প নির্ভরতা মধ্যে সঠিকভাবে যুক্ত করা হয় এখানে চিত্র বর্ণনা লিখুন


1
আপনার আমদানিটি v4 থেকে v7 এ পরিবর্তন করুন এবং এটি কার্যকর হয়েছিল
আহমেদ

উত্তর:


66

কেবল android-support-v7-appcompat.jarগ্রন্থাগার নির্ভরতা যুক্ত করা যথেষ্ট নয়, আপনি আপনার প্রকল্পে যে মডিউলটি আপনার এসডিকে পাথের মধ্যে খুঁজে পেতে পারেন তা আমদানি করতে হবে \android-sdk\extras\android\support\v7\appcompatএবং তার পরে এই প্রকল্পের কাঠামোটি কনফিগার করে মডিউল নির্ভরতা যুক্ত করতে হবে

এখানে চিত্র বর্ণনা লিখুন

অন্যথায় কেবল সমর্থন লাইব্রেরির ক্লাস ফাইলগুলি অন্তর্ভুক্ত করা হয়েছে এবং অ্যাপটি ত্রুটির কারণে অন্যান্য সংস্থানগুলি লোড করতে সক্ষম হয় না।

পুনর্বার প্রস্তাবিত হিসাবে এটি প্রতিস্থাপন হিসাবে

public CustomActionBarDrawerToggle(Activity mActivity,
                                           DrawerLayout mDrawerLayout) {
            super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
                    R.string.ns_menu_open, R.string.ns_menu_close);
        }

সঙ্গে

public CustomActionBarDrawerToggle(Activity mActivity,
                                           DrawerLayout mDrawerLayout) {
            super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
        }

ধন্যবাদ আপনাকে কাজ! তবে ড্রয়ার টগল বোতামটি অন্ধকার হয়ে যায়, কীভাবে রঙ পরিবর্তন করতে পারে?
AndreaF

আপডেট
ড্রয়ারটি


60

সেখানে কোন প্রয়োজন তোমাদের সুপার কল ব্যবহার করার জন্য এর ActionBarDrawerToggleযা প্রয়োজন টুলবার । নিম্নলিখিত কন্সট্রাক্টর ব্যবহার না করে এর অর্থ:

ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)

আপনার এটি ব্যবহার করা উচিত:

ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)

সুতরাং মূলত আপনাকে যা করতে হবে তা হল আপনার কাস্টমটি সরিয়ে ফেলা drawable:

super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);

দস্তাবেজের "নতুন" অ্যাকশনবারড্রওয়ারটিগল সম্পর্কে আরও ক্লিক করুন (ক্লিক করুন)


আমি আপনার পরামর্শটি অনুসরণ করার চেষ্টা করেছি তবে এই সমস্যাটি দিয়ে ক্র্যাশ হয়েছে:java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable; at android.support.v7.app.DrawerArrowDrawable.<init>(DrawerArrowDrawable.java:64) at android.support.v7.app.ActionBarDrawerToggle$DrawerArrowDrawableToggle.<init>(ActionBarDrawerToggle.java:469) at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:222) at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:150)
AndreaF

আপনি ঠিক Eclipse ব্যবহার করছেন? আপনি কি android-support-v7-appcompat.jarআপনার প্রকল্পের বৈশিষ্ট্যগুলিতে যাচাই করেছেন -> জাভা বিল্ড পাথ -> অর্ডার এবং এক্সপোর্ট? তদতিরিক্ত v7-appcompat শীর্ষে সরাতে এটি সহায়ক হতে পারে।
পুনর্বিবেচনা করুন

আমি ইন্টেলিজ ব্যবহার করি android-support-v7-appcompat.jarপ্রকল্পের নির্ভরতাগুলিতে আমি সমর্থন-ভি 4-তে একইভাবে যুক্ত করেছি (অন্যথায় এটি সংকলন করে না)
AndreaF

1
দুর্ভাগ্যক্রমে আমি ইন্টেলিজের সাথে পরিচিত নই। অ্যান্ড্রয়েড স্টুডিওতে আপনাকে কেবল compile "com.android.support:appcompat-v7:21.0.0"আপনার build.gradleফাইলে যুক্ত করতে হবে এবং আপনি ভাল।
পুনর্বিবেচনা করুন

আমি অনেকবার পরীক্ষা করে দেখেছি যদি লাইব্রেরি নির্ভরতা সঠিকভাবে কনফিগার করা থাকে, সমস্যাটির কারণ হওয়ার আরও কিছু কারণ রয়েছে, আমি ভেবেছিলাম লাইব্রেরিটি সম্ভবত দুর্নীতিগ্রস্থ হয়েছে তবে আমি এসডিকে ম্যানেজারের কাছ থেকে আবার ডাউনলোড করে যুক্ত করার চেষ্টা করেছি কোনও ফল ছাড়াই
AndreaF

27

আপনার অবশ্যই ব্যবহার করা উচিত import android.support.v7.app.ActionBarDrawerToggle;

এবং কনস্ট্রাক্টর ব্যবহার করুন

public CustomActionBarDrawerToggle(Activity mActivity,DrawerLayout mDrawerLayout)
{
    super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}

এবং যদি ড্রয়ার টগল বোতামটি অন্ধকার হয়ে যায় তবে আপনাকে অবশ্যই সমর্থন লাইব্রেরিতে সরবরাহ করা সমর্থনঅ্যাকশনবারটি ব্যবহার করতে হবে।

: আপনি এই লিঙ্ক থেকে supportActionbar বাস্তবায়ন করতে পারে http://developer.android.com/training/basics/actionbar/setting-up.html


ধন্যবাদ, একটি ম্যানুয়াল আমদানি import android.support.v7.app.ActionBarDrawerToggle;আমার জন্য কাজ করেছে। যদিও আমার অটো-আমদানি সাধারণত হয়, সেটি স্বয়ংক্রিয়ভাবে আমদানি করে না।
আজুরস্পট

এবং মুছুনimport android.support.v4.app.ActionBarDrawerToggle;
ভাইকিংগ্লেন

8

পরিবর্তে

drawer.setDrawerListener(toggle);

তুমি ব্যবহার করতে পার

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