In meiner Anwendung verwende ich pageviewer mit zwei Registerkarten. In jedem Tab bevölke ich die Ansicht mit einigen Daten nach dem Aufruf von aysnctask. Auch das Fragment, das diese Tabs und Viewpager enthält, enthält Filter, die den Inhalt meiner Ansicht entsprechend filtern. Außerdem benutze ich Recycleview für das Auffüllen von Daten. Beim Klick auf recycleview öffne ich ein neues Fragment. Das Problem, dem ich gegenüberstehe, ist, dass, wenn App zum ersten Mal geöffnet ist, nach Daten, wenn ich mein Fragment bei Klickereignissen mit getsupportFragmentmanager öffne, es gut funktioniert. Aber wenn ich meinen Dateninhalt mit Filter ändere, klicke ich auf Element, um Fragment mit GetsupportFragmentmanager zu öffnen Es gibt mir einen Fehler.NullpointerException mit getSupportfrgamnetmanager
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager android.support.v4.app.FragmentActivity.getSupportFragmentManager()' on a null object reference
ParentFragment Code ist hier:
public class TabB extends Fragment {
ViewPager viewPager;
TabLayout tabLayout;
Clubs clubs = new Clubs();
Events events = new Events();
private static RecyclerView Genre;
private RecyclerView.LayoutManager mLayoutManager;
public static JSONArray jsonArrayResult = new JSONArray();
public static final String[] IMAGE_NAME = {"allevent", "rock", "jazz", "house", "bass", "chill","bollywood","commerial", "karaoke","sufi"};
ArrayList<Integer> arrayList = new ArrayList<>();
public static String Genrename = IMAGE_NAME[0];
public static GenreAdapter genreAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.tabb, container, false);
viewPager = (ViewPager) RootView.findViewById(R.id.viewpager);
tabLayout = (TabLayout) RootView.findViewById(R.id.tabs);
Genre = (RecyclerView)RootView.findViewById(R.id.rvImages);
for (int i=0;i< IMAGE_NAME.length;i++){
String imageFileName = IMAGE_NAME[i];
int imgResId = getResources().getIdentifier(imageFileName, "drawable", "in.catalystapp.catalyst");
arrayList.add(imgResId);
}
mLayoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL, false);
Genre.setLayoutManager(mLayoutManager);
genreAdapter = new GenreAdapter(arrayList, getActivity());
Genre.setAdapter(genreAdapter);
TabBviewPagerAdapter tabBviewPagerAdapter = new TabBviewPagerAdapter(getChildFragmentManager(),"allevent");
viewPager.setAdapter(tabBviewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
genreAdapter.SetOnItemClickListener(new GenreAdapter.OnItemClickListener() {
@Override
public void OnItemClick(View view, int position) {
FilterGenres(IMAGE_NAME[position], new PageviewCaller() {
@Override
public void PopulatePageViewer(String key) {
Log.d("key", key);
clubs.PopulateClubList(key);
events.FilterEvents(key);
}
});
}
});
return RootView;
}
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public void FilterGenres(String key,PageviewCaller pageviewCaller){
pageviewCaller.PopulatePageViewer(key);
}
eines frgament Code Kind ist hier:
public class Clubs extends Fragment {
static ArrayList<ClubItem> mClubItems = new ArrayList<>();
static RecyclerView Clubcards;
static RecyclerView.LayoutManager layoutManager;
static ClubsAdapter clubsAdapter;
static Context context;
public String mKey;
Parcelable liststate;
static JSONArray jsonClubs = new JSONArray();
public Clubs(){}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.clubs, container, false);
Log.d("clubs-life-cycle","oncreate");
Clubcards = (RecyclerView)RootView.findViewById(R.id.clubcard);
context = getActivity();
Bundle args = getArguments();
mKey = args.getString("key");
new GetClubDetails().execute();
return RootView;
}
@Override
public void onPause() {
Log.d("liststate", "saving listview state @ onPause");
liststate = layoutManager.onSaveInstanceState();
super.onPause();
}
@Override
public void onResume(){
super.onResume();
if (liststate != null){
layoutManager.onRestoreInstanceState(liststate);
} else {
}
}
public class GetClubDetails extends AsyncTask<String,Void,Void> {
JSONObject jsonresult = new JSONObject();
ProgressDialog progressDialog = new ProgressDialog(getActivity());
@Override
protected void onPreExecute(){
super.onPreExecute();
progressDialog.setMessage("Fetching Feeds....");
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
protected Void doInBackground(String... params) {
RESTfulAPI resTfulAPI = new RESTfulAPI();
jsonresult = resTfulAPI.getJSONfromurl("api/clubs/","GET","");
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
progressDialog.dismiss();
super.onPostExecute(aVoid);
if (jsonresult!=null){
Log.d("json", jsonresult.toString());
try {
jsonClubs = jsonresult.getJSONArray("datasets");
PopulateClubList("allevent");
} catch (JSONException e) {
e.printStackTrace();
}
} else {
}
}
}
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public void PopulateClubList(String key){
mClubItems = new ArrayList<>();
clubsAdapter = null;
for (int i=0;i < jsonClubs.length();i++){
try {
if (key.equals("allevent") || key.equals(jsonClubs.getJSONObject(i).getString("genre"))){
mClubItems.add(new ClubItem(jsonClubs.getJSONObject(i).getString("clubName"),jsonClubs.getJSONObject(i).getString("address")));
clubsAdapter = new ClubsAdapter(mClubItems,context);
layoutManager = new LinearLayoutManager(context);
Clubcards.setLayoutManager(layoutManager);
Clubcards.setAdapter(clubsAdapter);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
clubsAdapter.SetOnItemClickListener(new ClubsAdapter.OnItemClickListener() {
@Override
public void OnItemClick(View view, int position) {
getActivity().getSupportFragmentManager().beginTransaction().setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out).add(R.id.main_content, new Clubdetails()).addToBackStack(null).commit();
}
});
}
Was mache ich falsch?
Ihre Importe Überprüfen Sie, sind Sie sicher, dass Sie in jedem Fragment, das die Unterstützung Fragment importieren? – bdavies6086
Scheint so, als ob Ihr Fragment losgelöst ist und Aktivität null ist –
Bitte poststacktrace. –