Android에서 하나의 MainActivity와 두 개의 조각으로 TabLayout을 만들었습니다.다른 조각 함수를 호출하는 방법
그러나 어떻게 두 번째 Fragment를 가져 와서 단추 이벤트를 받고 첫 번째 Fragment 함수를 호출합니까?
다음을 시도했지만 작동하지 않으며 묻습니다.
public interface CustomSearchPOI {
void requestSearch(String query);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
customSearchPOI = (CustomSearchPOI)context;
} catch (ClassCastException ex) {
throw new ClassCastException(context.toString() + "must implement CustomSearchPOI");
}
}
두 번째 조각 코드
if(info_cursor != null) {
info_cursor.moveToFirst();
while(!info_cursor.isAfterLast()) {
if(info_cursor.getInt(0) == id) {
out_subject.setText(info_cursor.getString(1));
out_college.setText(info_cursor.getString(2));
out_classroom.setText(info_cursor.getString(3));
break;
}
info_cursor.moveToNext();
}
}
choice_dialog.setPositiveButton(getString(R.string.Location_navigate), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
TabsFragment.viewPager.setCurrentItem(0);
customSearchPOI.requestSearch(out_college.getText().toString());
}
});
choice_dialog.setNegativeButton(getString(R.string.tt_modify), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
update_timetable_dialog(id);
}
});
choice_dialog.show();
통화 기능 코드
@Override
public void requestSearch(String query) {
String FRAGMENT_TAG = "LOCATION_TAG";
Fragment fragment = new MapFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(fragment, FRAGMENT_TAG).commitAllowingStateLoss();
try {
((MapFragment)getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG)).searchPOI(query);
} catch(NullPointerException ex) {
ex.printStackTrace();
Log.d("[TAG]", fragment.getTag());
}
}
MainActivity 코드
public void searchPOI(String query) {
query = Searchcheck(query);
TMapData data = new TMapData();
if(!TextUtils.isEmpty(query)) {
data.findAllPOI(query, new TMapData.FindAllPOIListenerCallback() {
@Override
public void onFindAllPOI(final ArrayList<TMapPOIItem> arrayList) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
tMapView.removeAllMarkerItem();
for (TMapPOIItem poi : arrayList) {
addMarker(poi);
}
if(arrayList.size() > 0) {
TMapPOIItem poi = arrayList.get(0);
moveMap(poi.getPOIPoint().getLatitude(), poi.getPOIPoint().getLongitude());
if(poi.getPOIPoint().getLatitude() > 36.832311 && poi.getPOIPoint().getLongitude() < 127.165038) {
Snackbar.make(coordinatorLayout, getString(R.string.No_place), Snackbar.LENGTH_LONG).show();
if(location_me.getVisibility() != View.INVISIBLE) {
location_me.hide();
}
return;
}
dst = new TMapPoint(poi.getPOIPoint().getLatitude(), poi.getPOIPoint().getLongitude());
searchRoute(src, dst);
}
}
});
}
});
}
}
첫 번째 조각 코드 (함수 호출)
Google 개발 문서에 따르면 조각과 단편 간의 직접적인 통신은 불가능합니다.
그래서 Fragment 함수를 통해 Fragment 함수를 호출하려고하면 NullPointerException 오류가 발생합니다.
try catch 구문을 사용하여 태그 이름에 오류가 있거나 쿼리에서 오류가 발생했는지는 알 수 없지만 어느 것도 문제가되지 않았습니다.
왜 한 조각에 인터페이스를 생성하고 다른 그것을 구현하지? – BiGGZ
또한 두 번째 조각을 구현해야합니까? 그러나 TabLayout에서 ViewPager를 어떻게 이동합니까? –
더 나은 아직, 두 fragmnts 같은 활동에, 왜 당신의 방법 대신 거기에 넣으십시오? – BiGGZ