私のアプリケーションでは、2つのタブを持つページビューアを使用しています。各タブでは、aysnctaskを呼び出した後に、いくつかのデータが表示されます。また、これらのタブとビューページャを含むフラグメントには、それに応じて私のビューの内容をフィルタリングするフィルタがあります。また、私はデータを取り込むためにRecycleviewを使用しています。 recycleviewの項目をクリックすると、新しい断片が開きます。私が直面している問題は、アプリケーションが開かれたとき、データの後にデータを取得するときに、getsupportFragmentmanagerを使用してクリックイベントでフラグメントを開くときです。ただし、フィルタを使用してデータコンテンツを変更すると、アイテムをクリックしてgetsupportFragmentmanagerそれは私に次のエラーを与える。getSupportfrgamnetmanagerを使用したNullpointerException
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コードはここにある:子frgamentコードの
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);
}
一つはここにある:私が間違ってやっている
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();
}
});
}
?
インポートを確認してください、各フラグメントにサポートフラグメントをインポートしていますか? – bdavies6086
フラグメントが切り離され、アクティビティがnullのようです。 –
stacktraceを投稿してください。 –