web-dev-qa-db-fra.com

Existe-t-il une méthode comme setResult () dans fragment?

J'utilise un fragment. Je reçois une erreur dans la méthode onResult(). J'ai besoin d'une méthode de remplacement pour setResult(RESULT_OK, data) que je puisse utiliser dans mon fragment. S'il vous plaît aider.

CalendrierFragment:

package app.pal.study.samplestudy;

import Android.app.Fragment;
import Android.content .Intent;
import Android.os.Bundle;
import Android.view.LayoutInflater;
import Android.view.MenuItem;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ListView;
import Java.util.Date;
import Java.util.List;

public class CalendarFragment  extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_calendar, container, false);
    return rootView;
}


@Override
public void onResume() {
    super.onResume();
    refresh();
}

private void refresh() {
    CalendarEventDataSource dataSource = new CalendarEventDataSource(getActivity());
    dataSource.openReadOnlyDB();
    final List<CalendarEvent> calendarEvents = dataSource.getAllEvents();
    dataSource.close();
    CalAllEventsListAdapter adapter = new CalAllEventsListAdapter(calendarEvents);
    ListView listView = (ListView) getView().findViewById(R.id.all_event_list);
    listView.setAdapter(adapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == Android.R.id.home) {
        end();
        return true;
    }
    return super.onOptionsItemSelected(item);
}



public void onBackPressed() {
    end();
}

private void end() {
    Intent data = new Intent();
    data.putExtra(Constants.DATE_KEY, (Date)(getArguments().get(Constants.DATE_KEY)));
    setResult(RESULT_OK, data);
  }
}
14
PersianBlue

Vous devriez l'appeler sur votre activité propriétaire de fragment:

 getActivity().setResult(Activity.RESULT_OK, data) 

aussi vous voudrez peut-être terminer votre activité:

 getActivity().finish();
20
marcinj

Si vous démarrez votre fragment à partir d'un autre fragment.

Vous devez utiliser:

/**
 * Optional target for this fragment.  This may be used, for example,
 * if this fragment is being started by another, and when done wants to
 * give a result back to the first.  The target set here is retained
 * across instances via {@link FragmentManager#putFragment
 * FragmentManager.putFragment()}.
 *
 * @param fragment The fragment that is the target of this one.
 * @param requestCode Optional request code, for convenience if you
 * are going to call back with {@link #onActivityResult(int, int, Intent)}.
 */

public void setTargetFragment(Fragment fragment, int requestCode) {
}

Au début de votre fragment.

Comme ça:

Fragment newFragment = new YourFragment();
newFragment .setTargetFragment(this, SOME_REQUEST_INT);

Et ensuite, dans YourFragment

Intent data = new Intent();
data.putExtra(Constants.DATE_KEY, (Date)(getArguments().get(Constants.DATE_KEY)));
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);

Ou

getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, null);
7
G_Artem

Utilisation 

getActivity().setResult(Activity.RESULT_OK, data);
1
Ragesh Ramesh

Utilisez ceci il peut être une aide pour vous ..

getActivity().setResult(Activity.RESULT_OK, data);
1
Abhishek Patel