이것은 이미 대답했을지 모르지만 나는 아직도 이와 같은 기능에 문제가 있습니다. 내가 액티비티 A 및 액티비티 B이라고 가정 해 봅시다. B는 viewpager
을 포함하고 있습니다. activity B이 가지고있는 조각에서 함수를 호출하고 싶습니다. activity A입니다.활동에서 다른 활동의 프래그먼트로 메소드를 호출하십시오. 적절한 방법은 무엇입니까?
액티비티와 프래그먼트간에 통신하기 위해 콜백을 여러 번 사용했지만, 단 한 번만 프래그먼트와 그 홀더 활동이었습니다. 정적 메서드 (콜백 수신기는 어쨌든 정적 일 수 없습니다)를 만들고 싶지 않아서 저에게 두통이 생깁니다. 조각에서 정적 메서드를 만들고 다른 개체에서 호출 한 간단한 정적 솔루션은 실제로 잘 작동하지만 정적 인 몇 가지 사항을 변경해야 할 때 좋은 생각인지 확실하지 않습니다.
그래서 활동 B 사이의 단편 괜찮 연통하지만 활동이 메소드를 호출 할 수있다.활동 B :
public class ActivityB extends FragmentActivity implements Fragment1.OnWhateverListener
{
...
@Override
public void onWhateverSelected(int position) {
//stuff, here I can call any function in Fragment 1
}
}
다음 코드는 잘못된 솔루션 (작동도 나던)하지만 내가하고 싶은 것이 더 나은 사진을 만든다.
활동 A :
ActivityB ab = new ActivityB();
ab.onWhateverSelected(number);
그래서 이것을 어떻게 할 수? 감사합니다.
편집
활동 A는 :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
...
processIntent(getIntent()); //last line of onCreate, always gets called here
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
processIntent(intent); // this never gets called here only in OnCreate
}
private void processIntent(Intent intent) {
Bundle args = intent.getBundleExtra("args");
if (args != null) { // check if ActivityB is started to pass data to fragments
String id = args.getString("ID");
Log.i("ID_FROM", "id: " + id); //works well
if (id != null) {
List<Fragment> fragments = new ArrayList<Fragment>();
fragments = getSupportFragmentManager().getFragments();
//NULLPOINTER for the following line
FragmentMainDiscover fr = (FragmentMainDiscover) fragments.get(0);
fr.RefreshHoverView(id);
}
}
}
내가 삽입 한 코드로 내 질문을 편집했습니다. 표시된 줄에 nullpointer가 생기는 문제입니다. 다른 컨텍스트에서이 코드를 사용하면 조각을 정확하게 찾습니다. 나는 또한 NewIntent 재정의 된 메서드가 호출되지 않는다는 것을 알지 못합니다. OnCreate 만 실행됩니다. 아마 nullpointer가 발생할 수 있습니다. –
어쨌든 다른 Activity를 시작하지 않으려 고합니다. 그냥 메서드를 호출하십시오. 나는 frag_args.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);를 넣을 수 있습니다. 그러나 이것은 현재 활동을 제거합니다. –