2016-04-08 2 views
9

Я новичок в android. Я использую фрагмент. Я получаю ошибку в методе onResult(). Мне нужен альтернативный метод setResult (RESULT_OK, data), который я могу использовать в своем фрагменте. Пожалуйста помоги.Есть ли метод, подобный setResult() в фрагменте?

CalendarFragment

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

какая ошибка? .. –

+1

setResult используется для действий, называемых startActivityForResult. Вы должны использовать обратный вызов интерфейса. – Nanoc

+0

@AbhishekPatel Ошибка: (58, 19) ошибка: не удается найти символьную переменную RESULT_OK – PersianBlue

ответ

15

Вы должны вызвать его на фрагмент, владеющее деятельности:

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

также вы можете захотеть, чтобы закончить свою деятельность:

getActivity().finish(); 
+0

RESULT_OK по-прежнему выдает ошибку – PersianBlue

+0

'выдает ошибку' - что вы имеете в виду? Компилятор может показать ошибку, это во время компиляции. Исключение может быть выбрано во время выполнения - тогда вы должны посмотреть на стек вызовов в logcat. – marcinj

+0

возможно также использовать startActivityForResult, когда вы начинаете свой фрагмент активности – MojioMS

1

Использование

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

Используйте это может быть помощь вам ..

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

Если вы начинаете свой фрагмент из другого фрагмента.

Вы должны использовать:

/** 
* 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) { 
} 

При запуске фрагмента.

Как это:

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

А потом, в YourFragment

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

Или

getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_CANCELED, null); 
Смежные вопросы