java - 如何通过单击抽屉导航上的 ImageView 来获取用户个人资料图片,从图库中选择图像

标签 java android

我已经创建了导航 Activity ,其中我想将抽屉导航标题上的 ImageView 作为用户个人资料图像。并且该图像的用户选择应该在图库中完成。我查了很多教程。我没有得到解决方案。我要么需要代码,要么针对这种情况评论匹配的教程。任何人都可以帮助我。

public class SecondActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
NavigationView navigationView = null;
Toolbar toolbar = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    DownloadFragment fragment = new DownloadFragment();
    android.support.v4.app.FragmentTransaction fragmentTransaction =
            getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.fragment_container, fragment);
    fragmentTransaction.commit();
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.second, menu);
    return (super.onCreateOptionsMenu(menu));
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == R.id.chat) {

        startActivity(new Intent(SecondActivity.this, ChatFragment.class));
        return (true);
    } else if (item.getItemId() == R.id.upload) {
        startActivity(new Intent(SecondActivity.this, UploadFlash.class));
        return (true);
    } else if (item.getItemId() == R.id.download) {
        startActivity(new Intent(SecondActivity.this, DownloadFragment.class));
        return (true);
    } else if (item.getItemId() == R.id.action_settings) {
        startActivity(new Intent(SecondActivity.this, SettingsFragment.class));
        return (true);
    } else if (item.getItemId() == R.id.offline) {
        startActivity(new Intent(SecondActivity.this, OfflineNotesFragment.class));
        return (true);
    } else if (item.getItemId() == R.id.drawges) {
        startActivity(new Intent(SecondActivity.this, OfflineNotesFragment.class));
        return (true);
    }
    return (super.onOptionsItemSelected(item));
}


@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.chat) {
        // Handle the camera action
        ChatFragment fragment = new ChatFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    } else if (id == R.id.upload) {
        UploadFlash fragment = new UploadFlash();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();

    } else if (id == R.id.download) {
        DownloadFragment fragment = new DownloadFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();

    } else if (id == R.id.action_settings) {
        SettingsFragment fragment = new SettingsFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    } else if (id == R.id.offline) {
        OfflineNotesFragment fragment = new OfflineNotesFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    } else if (id == R.id.drawges) {
        DrawingFragment fragment = new DrawingFragment();
        android.support.v4.app.FragmentTransaction fragmentTransaction =
                getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

最佳答案

您可以使用以下代码添加图像点击事件:

@Override
public void onClick (View v){
try {
    if (ActivityCompat.checkSelfPermission(Activity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(Activity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PICK_FROM_GALLERY);
    } else {
        Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(galleryIntent, 1);
    }
} catch (Exception e) {
    e.printStackTrace();
}
}

并添加此功能:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1 && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();

            ImageView imageView = (ImageView) findViewById(R.id.imgView);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

        }

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
   switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
              Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
              startActivityForResult(galleryIntent, 1);
            } else {
                //Error message
            }
            break;
    }
}

关于java - 如何通过单击抽屉导航上的 ImageView 来获取用户个人资料图片,从图库中选择图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46591418/

相关文章:

java - 生成一个整数并将其用作字符串数组的索引

java - 当 JOptionPane 窃取焦点时 JButton 保持按下状态

java - 检查原语是否已设置

android - AlertDialog 样式和颜色

android - 使用 ImageAdapter 以动态/编程方式使用 ImageView 填充 GridView

android - 如何在设备屏幕右侧设置抽屉布局图标?

java - 自加入谷歌应用程序引擎(java)

java - 在一对多关系的列上创建索引

java - 无法启动 Activity ComponentInfo (LOGCAT)

Android JsonReader 无法迭代 json 数组