2017-10-05 15 views
0

ナビゲーション・アクティビティーをすでに作成しました。ナビゲーション・ドロワー・ヘッダーの画像をユーザー・プロファイル・イメージとして作成したいと思います。その画像のユーザ選択はギャラリーで行う必要があります。私は多くのチュートリアルを検索しました。私は解決策を得ていませんでした。私はそれのためのコードを必要とするか、この状況のた​​めの一致するチュートリアルをコメントしてください。誰もがこれを手伝ってくれます。ギャラリーから画像を選択する方法ユーザーのプロフィール画像のナビゲーションドロワーの画像ビューをクリックして

あなたがこのコードで画像クリックでイベントを追加することができます
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; 
} 
+0

ターゲットSDKとは何ですか? –

+0

ターゲットsdkは25です。 –

+0

次に、以下の答えは機能しません。ギャラリーを開く前にランタイム権限を実装する必要があります。 –

答えて

1

@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; 
    } 
} 
+0

私のnavigation_header_main xmlファイルにonclick属性を追加する必要があります。 –

+0

また、私のコードにこのインテントの部分を追加する場所を教えてください。私はアンドロイドの開発に新しいです。 –

+0

が追加されました。これはアップリンクされましたが、ターゲットのSDKが25なのでこれはうまくいかないので、実行時アクセス許可を実装する必要があります。 – Daniele

関連する問題