নেভিগেশন ড্রয়ারের শিরোনামে কোনও পাঠ্যদর্শনটির পাঠ্য কীভাবে পরিবর্তন করবেন?


89

আমি নেভিগেশন ড্রয়ারের শিরোনামের ভিতরে একটি টেক্সটভিউয়ের পাঠ্য পরিবর্তন করতে চাই। তবে আমি এই ত্রুটিটি পেয়েছি:

java.lang.NullPointerException: একটি নাল বস্তুর রেফারেন্সে ভার্চুয়াল পদ্ধতি 'শূন্য android.widget.TextView.setText (java.lang.CharSequence)' আহ্বান করার চেষ্টা


কার্যকলাপ_মাইন.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            layout="@layout/app_bar_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@+id/frame_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

nav_header_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/slide_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/tvHeaderIcon"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:src="@android:drawable/sym_def_app_icon" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="@string/app_name"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:id="@+id/tvHeaderName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

মেইনএ্যাকটিভিটি.জভা

TextView tvHeaderName;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    tvHeaderName= (TextView) findViewById(R.id.tvHeaderName);
    tvHeaderName.setText("Saly");    
}

কিভাবে আমি এটি করতে পারব?

উত্তর:


274

আপনার নেভিগেশনভিউতে getHeaderView` ব্যবহার করুন

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
View headerView = navigationView.getHeaderView(0);
TextView navUsername = (TextView) headerView.findViewById(R.id.navUsername);
navUsername.setText("Your Text Here");

4
TextViewনেভিগেশন ড্রয়ারের শিরোনামে নির্ভরযোগ্যভাবে আপডেট করতে , ActionBarDrawerToggle.onDrawerOpened()পদ্ধতিতে এই কোডটি ব্যবহার করুন । দেখুন: স্ট্যাকওভারফ্লো . com / a / 35952939 / 1657502
অ্যান্টোনিও ভিনিসিয়াস মেনেইজেস মেডেই

সাভার সাথী
বিশ্বজিৎ দাস

9

নেভিগেশনভিউ থেকে আপনার শিরোনাম বিন্যাসটি প্রথম স্ফীত করা উচিত ...

navHeaderView= navigationView.inflateHeaderView(R.layout.nav_header_main);
tvHeaderName= (TextView) navHeaderView.findViewById(R.id.tvHeaderName);
tvHeaderName.setText("Saly"); 

4
আমার জন্য inflayHeaderView কাজ করে না। আমি পরিবর্তে getHeaderView (0) ব্যবহার করেছি।
জিৎজার

6
এই সমাধানটি সঠিকভাবে কাজ করে না। এটি দুবার শিরোনাম দেখায়। GetHeaderView (0) টি কাজ করে।
আলফা ডেভেলপার

4
@ ব্রেকেটগোবিজের সঠিক উত্তর রয়েছে, এটি সঠিকভাবে কাজ করে না
টাচোফারস্যাকসম

আপনি যদি এক্সএমএল ফাইল থেকে পরবর্তী লাইনটি সরিয়ে থাকেন তবে এই সমাধানটিও দুর্দান্ত অ্যাপ্লিকেশনটি ব্যবহার করে: শিরোনাম লেআউট = "@ লেআউট / নেভ_হেডার_মাইন"
পাবলো ইনসুয়া

7

কোডটির কোটলিন সংস্করণটি এখানে রয়েছে আশা করি এটি কোনও ব্যক্তিকে সাহায্য করবে।

val navigationView : NavigationView  = findViewById(R.id.nav_view)
val headerView : View = navigationView.getHeaderView(0)
val navUsername : TextView = headerView.findViewById(R.id.txtUserName)
val navUserEmail : TextView = headerView.findViewById(R.id.txtEmail)

navUsername.text = username.toString()
navUserEmail.text = email.toString()

6

আপনি এটি 23.1.1 ডিজাইন সমর্থন লাইব্রেরি হিসাবে ব্যবহার করতে পারেন

View header = navigationView.getHeaderView(0)
TextView text = (TextView) header.findViewById(R.id.textView);

তথ্যসূত্র: https://stackoverflow.com/a/33692431/2761923


3
  1. আপনার ক্রিয়াকলাপে আপনাকে নেভিগেশনভিউ আইডিটি পেতে হবে

    NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView );
    
  2. এবার নেভিগেশনভিউ আইডিটি ব্যবহার করে শিরোনাম দেখুন লেআউটটি পান

    View headerView = navigationView.getHeaderView(0);
    
  3. এখন আপনি যে কোনও ভিউ আইডি পেতে পারেন এবং আপনি যা চান উদাহরণটি ক্রিয়া সম্পাদন করতে পারেন

    TextView navUsername = (TextView) headerView.findViewById(R.id.navUsername);
    navUsername.setText("Your Text Here");
    

আজ আমার জন্য কাজ করেছেন
আরসালান ফখর

0

নেভিগেশন শিরোনাম পেতে এটি ব্যবহার করুন

View hview = navigationView.getHeaderView(0);

তারপরে নেভিগেশন শিরোনামের বিভিন্ন দৃষ্টিভঙ্গি দেখার জন্য ভিউটি ব্যবহার করুন এবং আপনি যা চান তা করুন

অন্যথায় এটি ব্যবহার navHeaderView= navigationView.inflateHeaderView(R.layout.nav_header_main); করে সূচী 1 এ একটি নতুন শিরোনাম তৈরি করছে।


0

প্রকৃতপক্ষে, একটি ভেরিয়েবলের মধ্যে নেভিগেশন ভিউকে স্ফীত করে আমাদের নেভিগেশন ভিউয়ের উদাহরণটি পেতে হবে, পরে আপনি পাঠ্যদর্শন সম্পাদনা করার জন্য পাঠ্য ভিউ উদাহরণটি পেতে পারেন


0

আমার জন্য কি কাজ করেছে? এই এর:-

 View linearLayout=navigationView.inflateHeaderView(R.layout.nav_header_main);
      TextView name =  linearLayout.findViewById(R.id.welcomenametext);

তবে মনে রাখবেন এটি আপনার এক্সএমএল ফাইল থেকে নেভিগেশনভিউ থেকে অপসারণ করুন: -app:headerLayout="@layout/nav_header_main"


ঠিক আছে এই উপরের উত্তরটি ছাড়াও কয়েক মাসের মধ্যে আমি এখন বুঝতে পেরেছি যে আপনি যদি অ্যান্ড্রয়েড বিকাশে যথেষ্ট উন্নত হন তবে এটি করার আরও একটি ভাল উপায় আছে! সেখানে কেবল ফ্রেম বিন্যাস রাখুন এবং এর মধ্যে ফ্রেমমেন্ট লোড করুন যার মধ্যে আমাদের রিসাইক্লিউভিউ এবং শিরোনাম বিভাগ রয়েছে। রিসাইক্লারভিউয়ের সাহায্যে আপনি পাঠ্যদর্শন, চিত্র এবং আপনার পছন্দ মতো আরও অনেকগুলি পছন্দ মতো শিরোনাম সেটআপ করতে পারেন। আমি যে সাম্প্রতিক অ্যাপ্লিকেশনটিতে কাজ করছি ঠিক তা করেছে Dআপনার আইকনগুলি দিয়ে ফ্র্যাগমেন্টএকটিভিটি থেকে ডায়নামিকভাবে ডেটা রিক্লিকারভিউতে পাস করে এবং একটি আপেক্ষিক বিন্যাস (টেক্সটভিউ এবং চিত্রের অভ্যন্তরের অভ্যন্তরে) রেখে দেয় যা রিসাইক্লিউভিউয়ের শীর্ষে শিরোনাম হিসাবে কাজ করে।


0

এটি আমার পক্ষে কাজ করেছে:

NavigationView navigationView = findViewById(R.id.nav_view);
View headerView = navigationView.getHeaderView(0);
TextView title = headerView.findViewById(R.id.nav_title);
TextView subTitle = headerView.findViewById(R.id.nav_sub_title);

0
val navigationView = findViewById<View>(R.id.nav_view_home) as NavigationView
        val headerView = navigationView.getHeaderView(0)
        val tvUserName = headerView.findViewById<View>(R.id.tvUserName) as TextView
        tvUserName.text=(Preference.getInstance("your text")

-1

আমার একই সমস্যা রয়েছে, তবে প্রদত্ত দুটি সমাধানই আমার পক্ষে কার্যকর হয়নি

java.lang.IllegalStateException: ক্ষেত্রের 'ব্যবহারকারীর নাম' জন্য 2131296646 আইডি সহ প্রয়োজনীয় ভিউ 'nav_header_username' পাওয়া যায়নি। এই মতামতটি যদি @চ্ছিক হয় তবে '@ নুল' (ক্ষেত্রগুলি) বা '@ অপশনাল' (পদ্ধতি) টীকা যোগ করুন।

উপরে পোস্ট করা হিসাবে আমার প্রায় একই কোড আছে:

NavigationView navigationView = (NavigationView)findViewById(R.id.navigation_content);
View headerView = navigationView.inflateHeaderView(R.layout.nav_header);
TextView navUsername = (TextView) headerView.findViewById(R.id.nav_header_username);
navUsername.setText("Hello, "+mUserSession.getLoggedUserData().getmFirstName());

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