首页 > 解决方案 > 我想使用导航抽屉上的图像捕获更改配置文件?这是可能的?

问题描述

导航抽屉

我写了这段代码,但问题是应用程序崩溃。

这个 id 我的 nav_header 文件 xml 代码,我正在使用 circleimageview 和 imagebutton。

        <?xml version="1.0" encoding="utf-8"?>
        <androidx.constraintlayout.widget.ConstraintLayout
        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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:background="@color/white">
    
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/Profile"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="10dp"
            android:src="@drawable/ic_baseline_person_24"
            app:civ_border_color="@color/black"
            app:civ_border_width="2dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <ImageButton
            android:id="@+id/change_Profile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/background_center"
            app:layout_constraintBottom_toBottomOf="@+id/Profile"
            app:layout_constraintEnd_toEndOf="@+id/Profile"
            app:srcCompat="@drawable/ic_baseline_add_circle_24" />
    
        <TextView
            android:id="@+id/User_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginTop="72dp"
            android:paddingTop="8dp"
            android:text="Robin Hud"
            android:textColor="@color/black"
            android:textSize="20dp"
            android:textStyle="bold"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginTop="110dp"
            android:text="sufiyan123@gmail.com"
            android:textSize="16dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginTop="135dp"
            android:background="@color/underline"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    
    </androidx.constraintlayout.widget.ConstraintLayout>


----------


这是导航抽屉的 kotlin 文件代码

package com.example.pgf.view.home

import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.view.MenuItem
import android.widget.ImageButton
import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.drawerlayout.widget.DrawerLayout
import androidx.fragment.app.Fragment
import com.example.pgf.R
import com.example.pgf.model.PGListModel
import com.example.pgf.view.authentication.Login
import com.example.pgf.view.home.fragments.*
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.navigation.NavigationView
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import de.hdodenhof.circleimageview.CircleImageView

class MainActivity : AppCompatActivity() {

    private lateinit var toggle: ActionBarDrawerToggle
    private lateinit var drawerLayout: DrawerLayout
    var email:String? = null
    var profile: CircleImageView? = null
    var reqcode = 345


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //Profile change
        profile = findViewById(R.id.Profile)
        var btnChange = findViewById<ImageButton>(R.id.change_Profile)
        btnChange.setOnClickListener {

            var captureImage = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            startActivityForResult(captureImage,reqcode)
        }

        //get user Email
        val user = FirebaseAuth.getInstance().currentUser
         email = user?.email
        Toast.makeText(applicationContext,email,Toast.LENGTH_SHORT).show()

        drawerLayout = findViewById(R.id.drawer)
        val navView: NavigationView = findViewById(R.id.navView)

        toggle = ActionBarDrawerToggle(this,drawerLayout,R.string.open,R.string.close)
        drawerLayout.addDrawerListener(toggle)
        toggle.syncState()

        supportActionBar?.setDisplayHomeAsUpEnabled(true)

        replaceFragment(HomeFragment(),"Home")
        navView.setNavigationItemSelectedListener {
            it.isChecked = true
            when(it.itemId){
                R.id.nav_home    -> replaceFragment(HomeFragment(),it.title.toString())
                R.id.nav_star    -> replaceFragment(StarFragment(),it.title.toString())
                R.id.nav_help    -> replaceFragment(HelpFragment(),it.title.toString())
                R.id.nav_setting -> replaceFragment(SettingFragment(),it.title.toString())
                R.id.nav_profile -> replaceFragment(ProfileFragment(),it.title.toString())
                R.id.nav_logout  -> logout()
                R.id.nav_share   -> Toast.makeText(applicationContext,"Clicked Share",Toast.LENGTH_SHORT).show()
            }
            true
        }
    }

    private fun replaceFragment(fragment: Fragment, title: String){
        val fragmentStateManagerControl = supportFragmentManager
        val fragmentTransaction = fragmentStateManagerControl.beginTransaction()
        fragmentTransaction.replace(R.id.framelayout,fragment)
        fragmentTransaction.commit()
        drawerLayout.closeDrawers()
        setTitle(title)

    }

    fun logout(){
        Firebase.auth.signOut()
        startActivity(
            Intent(this,Login::class.java)
        )
        this.finish()
    }
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if (toggle.onOptionsItemSelected(item)){
            return true
        }
        return super.onOptionsItemSelected(item)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if(resultCode== Activity.RESULT_OK && requestCode==reqcode && data!=null)
        {
            profile!!.setImageBitmap(data.extras?.get("data") as Bitmap)
        }
        else
        {
            Toast.makeText(applicationContext,"Something Went Wrong!!",Toast.LENGTH_LONG).show()
        }
    }
}

这是我的所有代码,所以我想使用导航抽屉上的相机捕捉来更改个人资料图片。

那我该怎么做呢?

Logcat 在此处输入图像描述

标签: androidandroid-studiokotlinandroid-layoutnavigation-drawer

解决方案


推荐阅读