Фрагменты Navigation drawer-a, ImageView

Интерфейс, диалоги, темы, стили, меню
Ответить
GoOoRoOo.StyleZz1
Сообщения: 8
Зарегистрирован: 05 июл 2015, 13:05

Фрагменты Navigation drawer-a, ImageView

Сообщение GoOoRoOo.StyleZz1 » 07 июл 2015, 09:20

Дело в том что я хочу сделать 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);
    }


}

Что же делать в такой ситуации?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение klblk » 07 июл 2015, 09:51

у фрагмента есть метод startActivityForResult() и onActivityResult(), он также умеет имплементить OnClickListener. В чем проблема?

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение Dark67 » 07 июл 2015, 09:53

Fragment.startActivityForResult(Intent intent, int requestCode)
Fragment.onActivityResult(int requestCode, int resultCode, Intent data)

https://developer.android.com/reference ... gment.html

GoOoRoOo.StyleZz1
Сообщения: 8
Зарегистрирован: 05 июл 2015, 13:05

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение GoOoRoOo.StyleZz1 » 07 июл 2015, 10:56

Dark67 писал(а):Fragment.startActivityForResult(Intent intent, int requestCode)
Fragment.onActivityResult(int requestCode, int resultCode, Intent data)

https://developer.android.com/reference ... gment.html
Спасибо за ответ! Но я новичок по 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, но не получилось :*, я закрасил красным где шибки

GoOoRoOo.StyleZz1
Сообщения: 8
Зарегистрирован: 05 июл 2015, 13:05

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение GoOoRoOo.StyleZz1 » 07 июл 2015, 11:03

Dark67 писал(а):Fragment.startActivityForResult(Intent intent, int requestCode)
Fragment.onActivityResult(int requestCode, int resultCode, Intent data)

https://developer.android.com/reference ... gment.html

Благодарю за ответ! Но у меня не получилось, я перестроил код под ваш метод и все равно выдает ошибку :(

Я уже бьюсь 2 часа над этим. Вы не могли бы пожалуйста написать код? Это очень поможет =)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение klblk » 07 июл 2015, 11:52

Может стоит Java подучить вначале?
Вам нужно сделать все тоже самое что вы делаете в Activity, но во Fragment'е:
1) Инициализировать view в методе onCreateView() (у Activity это делается в методе onCreate)
2) Заимплиментить OnClickListener и описать метод onClick() (в точности как у Activity)
3) Заоверайдить onActivityResult (отличие от Activity только в области видимости: у Fragment она public)

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение Dark67 » 07 июл 2015, 11:59

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]

GoOoRoOo.StyleZz1
Сообщения: 8
Зарегистрирован: 05 июл 2015, 13:05

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение GoOoRoOo.StyleZz1 » 07 июл 2015, 19:25

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;" Надеюсь это правильно) А вот вторая ошибка появилась в конце кода -

Код: Выделить всё

image.setImageBitmap(img); 
Пытаюсь его как нибудь заменить, но не получается. Можете помочь пожалуйста

GoOoRoOo.StyleZz1
Сообщения: 8
Зарегистрирован: 05 июл 2015, 13:05

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение GoOoRoOo.StyleZz1 » 08 июл 2015, 15:34

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", а так же в строчке

Код: Выделить всё

image.setImageBitmap(img);
Спасибо что помогаете. Что делать с этими ошибками?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение klblk » 09 июл 2015, 08:23

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", а так же в строчке

Код: Выделить всё

image.setImageBitmap(img);
Спасибо что помогаете. Что делать с этими ошибками?
Пункт первый не выполнили судя по всему. Ну и если вы переносите действия во фрактемнт, то и соответствующие переменные должны переместить сюда, в том числе и в 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]

GoOoRoOo.StyleZz1
Сообщения: 8
Зарегистрирован: 05 июл 2015, 13:05

Re: Фрагменты Navigation drawer-a, ImageView

Сообщение GoOoRoOo.StyleZz1 » 10 июл 2015, 15:35

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", а так же в строчке

Код: Выделить всё

image.setImageBitmap(img);
Спасибо что помогаете. Что делать с этими ошибками?
Пункт первый не выполнили судя по всему. Ну и если вы переносите действия во фрактемнт, то и соответствующие переменные должны переместить сюда, в том числе и в 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]

Огромнейшее спасибо!!! :lol: Все получилось!!!11

Ответить