2016-04-08 13 views
0

私のアプリケーションでは、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(); 
     } 
    }); 
} 

+0

インポートを確認してください、各フラグメントにサポートフラグメントをインポートしていますか? – bdavies6086

+0

フラグメントが切り離され、アクティビティがnullのようです。 –

+0

stacktraceを投稿してください。 –

答えて

0

異なるバージョンのフラグメントをインポートしているため、これが発生することがあります。

Fragmentの2種類があります。

android.support.v4.app.Fragment

android.app.Fragment

各Fragmnetクラスまたはアクティビティに同じFragmentをインポートしていることを確認してください。

0

getSupportFragmentManager()の代わりにgetFragmentManager()を使用できますか?

あなたのバージョンのappcompatライブラリが原因である可能性があります

関連する問題