Выбрать фотографию из галереи (проблема с onActivityResult () - мне так кажется) - Фрагмент Android - PullRequest
0 голосов
/ 31 марта 2019

У меня очень большая проблема. Я пытаюсь выбрать фотографию из галереи вид из приложения , но когда я нажимаю на фотографию, мое приложение сворачивается. Когда я максимизирую его, приложение находится в начальном состоянии. Я видел, что метод onActivityResult () не вызывает.

Ниже приведен мой код для AddFragment.java, из которого я выбираю фотографию и MainAcitivity. Я проверил все форумы и сайты, и ни у кого нет такой проблемы. Спасибо за совет :) Не знаю что делать: (

public class AddFragment extends Fragment{


private Button addPhoto;
private ImageView imageView;
private Uri imageUri;
private final int PICK_IMAGE_REQUEST = 1;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_add,container,false);


    imageView=v.findViewById(R.id.imgView);
    addPhoto=v.findViewById(R.id.button_addphoto);
    addPhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openFileChooser();

        }
    });


    return v;
}


private void openFileChooser(){
    Intent intent=new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    Log.d(TAG, "OPENFILECHOOSER");
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),PICK_IMAGE_REQUEST);
    Log.d(TAG, "OPENFILECHOOSER2");

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "OPENFILECHOOSER3");

    if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            &&data != null && data.getData() !=null){
        imageUri = data.getData();

        Picasso.get().load(imageUri).resize(50,50).into(imageView);

    }

}

}

MainActivity.java

public class MainActivity extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener {

private DrawerLayout drawer;
NavigationView navigationView;
private FragmentManager fragmentManager;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Toolbar toolbar=findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    drawer = findViewById(R.id.drawer_layout);
    navigationView=findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    ActionBarDrawerToggle toogle=new ActionBarDrawerToggle(this,drawer,toolbar,
            R.string.navigation_drawer_open,R.string.navigation_drawer_close);
    drawer.addDrawerListener(toogle);
    toogle.syncState();
    if(savedInstanceState==null) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new HomeFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_home);
    }
   fragmentManager = getFragmentManager();


}


@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch(item.getItemId()){

        case R.id.nav_home:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();

            break;

        case R.id.nav_add_new:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new AddFragment()).commit();


            break;

        case R.id.nav_login:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new LoginFragment()).commit();


            break;


        case R.id.nav_browse:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new BrowseFragment()).commit();


            break;


        case R.id.nav_logout:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();

            signOut(FirebaseAuth.getInstance());
            break;

        case R.id.nav_profile:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();

            break;
    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
}


@Override
public void onBackPressed() {
    if(drawer.isDrawerOpen(GravityCompat.START)){
        drawer.closeDrawer(GravityCompat.START);

    }
    else if (fragmentManager.getBackStackEntryCount() > 0) {
        fragmentManager.popBackStack();
    } else {
        //super.onBackPressed();
    }

}

private void signOut(FirebaseAuth mAuth) {
    if (mAuth != null) {
        mAuth.signOut();
        navigationView.getMenu().findItem(R.id.nav_login).setVisible(true);
        navigationView.getMenu().findItem(R.id.nav_logout).setVisible(false);
        navigationView.getMenu().findItem(R.id.nav_profile).setVisible(false);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "OPENFILECHOOSER4");
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
    fragment.onActivityResult(requestCode,resultCode,data);



}

}

// In your MainActivity.java


@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     Log.d(TAG, "OPENFILECHOOSER4");
     super.onActivityResult(requestCode, resultCode, data);
 }

After pick photo

В logcat ничего не появляется. Я вижу, что метод onActivityResult () не получает вызов

1 Ответ

1 голос
/ 31 марта 2019

Вы всегда должны звонить super.onActivityResult() в своей деятельности onActivityResult. Это то, что отправляет onActivityResult обратные вызовы Фрагментам, которые вызвали startActivityForResult с правильными requestCodes - ваш метод отправки вручную не выполняет повторное отображение кода запроса:

// In your MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "OPENFILECHOOSER4");
    super.onActivityResult(requestCode, resultCode, data);
}

Эта проблема была подана с добавлением @CallSuper для решения именно этой проблемы, и ее планируется выпустить во Фрагментах 1.1.0-alpha06.

...