Страница 1 из 1
Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 09:20
GoOoRoOo.StyleZz1
Дело в том что я хочу сделать ImageView в которой можно будет вставлять изображения из галереи. Составил xml, но возникли проблемы с class-ом. И проблема в том что код который я использую для кнопки чтобы выбрать изображение из галереи предназначен для Activity, а я использую фрагменты так как прога под navigation drawer.
Код: Выделить всё
import java.io.FileNotFoundException;
import java.io.IOException;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
private Button loadButton;
private ImageView image;
private static final int REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.imageView1);
loadButton = (Button) findViewById(R.id.button1);
loadButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
Я подумывал над тем что надо преобразовать код под фрагмент, вот кстати и код фрагмента:
Код: Выделить всё
package com.sample.drawer.fragments;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.sample.drawer.R;
public class Fragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_2, container, false);
}
}
Что же делать в такой ситуации?
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 09:51
klblk
у фрагмента есть метод startActivityForResult() и onActivityResult(), он также умеет имплементить OnClickListener. В чем проблема?
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 09:53
Dark67
Fragment.startActivityForResult(Intent intent, int requestCode)
Fragment.onActivityResult(int requestCode, int resultCode, Intent data)
https://developer.android.com/reference ... gment.html
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 10:56
GoOoRoOo.StyleZz1
Спасибо за ответ! Но я новичок по android. Я сделал все как вы сказали и у меня получилось вот это:
Код: Выделить всё
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import com.sample.drawer.R;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Fragment1 extends Fragment {
private Button loadButton;
private ImageView image;
private static final int REQUEST = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_1, container, false);
}
[color=#FF0000]@Override[/color]
Fragment.startActivityForResult(Intent intent, [color=#FF0000]int requestCode[/color]){
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
[color=#FF0000]@Override[/color]
Fragment.onActivityResult(int requestCode, int resultCode, int data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == [color=#FF0000]RESULT_OK[/color]) {
Uri selectedImage = data.[color=#FF0000]getData[/color]();
try {
img = MediaStore.Images.Media.getBitmap([color=#FF0000]getContentResolver[/color](), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
super.onActivityResult(requestCode, resultCode, [color=#FF0000]data[/color]);
}
}
Я так же пытался подставлять все возможные варианты который предлагал android studio, но не получилось :*, я закрасил красным где шибки
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 11:03
GoOoRoOo.StyleZz1
Благодарю за ответ! Но у меня не получилось, я перестроил код под ваш метод и все равно выдает ошибку
Я уже бьюсь 2 часа над этим. Вы не могли бы пожалуйста написать код? Это очень поможет =)
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 11:52
klblk
Может стоит Java подучить вначале?
Вам нужно сделать все тоже самое что вы делаете в Activity, но во Fragment'е:
1) Инициализировать view в методе onCreateView() (у Activity это делается в методе onCreate)
2) Заимплиментить OnClickListener и описать метод onClick() (в точности как у Activity)
3) Заоверайдить onActivityResult (отличие от Activity только в области видимости: у Fragment она public)
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 11:59
Dark67
Activity.RESULT_OK
getActivity().getContentResolver()
[syntax=java]@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getActivity().getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
} [/syntax]
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 07 июл 2015, 19:25
GoOoRoOo.StyleZz1
Dark67 писал(а):Activity.RESULT_OK
getActivity().getContentResolver()
[syntax=java]@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getActivity().getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
} [/syntax]
Огромное спасибо! Помогло, но все же были 2 ошибки =( на "REQUEST" я нажал alt+enter и сделал для него - "private static final int REQUEST = 1;" Надеюсь это правильно) А вот вторая ошибка появилась в конце кода -
Пытаюсь его как нибудь заменить, но не получается. Можете помочь пожалуйста
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 08 июл 2015, 15:34
GoOoRoOo.StyleZz1
klblk писал(а):Может стоит Java подучить вначале?
Вам нужно сделать все тоже самое что вы делаете в Activity, но во Fragment'е:
1) Инициализировать view в методе onCreateView() (у Activity это делается в методе onCreate)
2) Заимплиментить OnClickListener и описать метод onClick() (в точности как у Activity)
3) Заоверайдить onActivityResult (отличие от Activity только в области видимости: у Fragment она public)
Ok, спасибо! То есть вы имели ввиду вот так?
Код: Выделить всё
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getActivity().getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
}
Но у меня все же есть ошибка в переменной "REQUEST", а так же в строчке
Спасибо что помогаете. Что делать с этими ошибками?
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 09 июл 2015, 08:23
klblk
GoOoRoOo.StyleZz1 писал(а):klblk писал(а):
1) Инициализировать view в методе onCreateView() (у Activity это делается в методе onCreate)
Ok, спасибо! То есть вы имели ввиду вот так?
Код: Выделить всё
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getActivity().getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
}
Но у меня все же есть ошибка в переменной "REQUEST", а так же в строчке
Спасибо что помогаете. Что делать с этими ошибками?
Пункт первый не выполнили судя по всему. Ну и если вы переносите действия во фрактемнт, то и соответствующие переменные должны переместить сюда, в том числе и в xml.
[syntax=java] private Button loadButton;
private ImageView image;
private static final int REQUEST = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_1, container, false);
image = (ImageView) view.findViewById(R.id.imageView1);
loadButton = (Button) view.findViewById(R.id.button1);
loadButton.setOnClickListener(this);
return view;
} [/syntax]
Re: Фрагменты Navigation drawer-a, ImageView
Добавлено: 10 июл 2015, 15:35
GoOoRoOo.StyleZz1
klblk писал(а):GoOoRoOo.StyleZz1 писал(а):klblk писал(а):
1) Инициализировать view в методе onCreateView() (у Activity это делается в методе onCreate)
Ok, спасибо! То есть вы имели ввиду вот так?
Код: Выделить всё
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
startActivityForResult(i, REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap img = null;
if (requestCode == REQUEST && resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
try {
img = Media.getBitmap(getActivity().getContentResolver(), selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
image.setImageBitmap(img);
}
}
Но у меня все же есть ошибка в переменной "REQUEST", а так же в строчке
Спасибо что помогаете. Что делать с этими ошибками?
Пункт первый не выполнили судя по всему. Ну и если вы переносите действия во фрактемнт, то и соответствующие переменные должны переместить сюда, в том числе и в xml.
[syntax=java] private Button loadButton;
private ImageView image;
private static final int REQUEST = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_1, container, false);
image = (ImageView) view.findViewById(R.id.imageView1);
loadButton = (Button) view.findViewById(R.id.button1);
loadButton.setOnClickListener(this);
return view;
} [/syntax]
Огромнейшее спасибо!!!

Все получилось!!!11