嗨,我想做的是我有一个带Viewpager的bottomNavigationView,因此当在Viewpager上滑动导航片段时添加/替换意味着Viewpager是片段容器
现在我的问题是-如何从 MainFragmen 调用 Child_Fragment ?
我尝试过的是下面的
public class FirstActivity extends FragmentActivity {
BottomNavigationView bottomNavigationView;
//This is our viewPager
private ViewPager viewPager;
//Fragments
CategoryFragment categoryFragment;
FavouriteFragment favouriteFragment;
MyPostFragment myPostFragment;
SettingFragment settingFragment;
MenuItem prevMenuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
//Initializing viewPager
viewPager = findViewById(R.id.viewpager);
//Initializing the bottomNavigationView
bottomNavigationView = findViewById(R.id.nav_view);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
viewPager.setCurrentItem(0);
break;
case R.id.navigation_dashboard:
viewPager.setCurrentItem(1);
break;
case R.id.navigation_notifications:
viewPager.setCurrentItem(2);
break;
case R.id.navigation_setting:
viewPager.setCurrentItem(3);
break;
}
return false;
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (prevMenuItem != null) {
prevMenuItem.setChecked(false);
}
else
{
bottomNavigationView.getMenu().getItem(0).setChecked(false);
}
Log.d("page", "onPageSelected: "+position);
bottomNavigationView.getMenu().getItem(position).setChecked(true);
prevMenuItem = bottomNavigationView.getMenu().getItem(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
setupViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
categoryFragment=new CategoryFragment();
favouriteFragment=new FavouriteFragment();
myPostFragment=new MyPostFragment();
settingFragment=new SettingFragment();
adapter.addFragment(categoryFragment);
adapter.addFragment(favouriteFragment);
adapter.addFragment(myPostFragment);
adapter.addFragment(settingFragment);
viewPager.setAdapter(adapter);
}
}
现在我的CategoryFragment是这个,它是NavigationView默认选中的第一项
public class CategoryFragment extends Fragment implements AdapterInterface {
Multimap<String, String> multiMaphsmap = ArrayListMultimap.create();
static HashMap<String, String> subcategoryID_HasmapList = new HashMap<>();
ArrayList<String> idlist = new ArrayList<>();
ArrayList<String> name_list = new ArrayList<>();
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView recyclerView;
IResult mResultCallback;
CatLoadingView dialog;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate( R.layout.fragment_home, container, false );
recyclerView = root.findViewById(R.id.my_recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
dialog = new CatLoadingView();
// Call Volly TO Fetch Data From Server CatLoadin Dialog
dialog.show(getActivity().getSupportFragmentManager(), "");
try {
initVolleyCallback();
VolleyService mVolleyService = new VolleyService(mResultCallback, getActivity());
mVolleyService.postDataVolley(0,"");
} catch (Exception e) {
e.printStackTrace();
}
return root;
}
void initVolleyCallback(){
mResultCallback = new IResult() {
@Override
public void notifySuccess(String response) {
Log.e("response", response);
JSONObject obj = null;
JSONObject heroObject = null;
try {
obj = new JSONObject(response);
JSONArray responseData = obj.getJSONArray("responseData");
for (int i = 0; i < responseData.length(); i++) {
//getting the json object of the particular index inside the array
heroObject = responseData.getJSONObject(i);
String cat_name = heroObject.getString("category_name");
name_list.add(cat_name);
String id = heroObject.getString("id");
idlist.add(id);
Log.e("ALL ID-", id);
JSONArray subcatarray = heroObject.getJSONArray("subcategory_list");
for (int j = 0; j < subcatarray.length(); j++) {
JSONObject suboject = subcatarray.getJSONObject(j);
String category_id = suboject.getString("category_id");
Log.e("category_id", category_id);
String subcatname = suboject.getString("subcategory_name");
String subid = suboject.getString("id");
Log.e("id", subid);
subcategoryID_HasmapList.put(subid, subcatname);
HaspMapSetMethod(category_id, subcatname);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
if (dialog.isAdded()) {
dialog.dismiss();
}
//dismiss CatDialog is showing already
if (dialog.isAdded())dialog.dismiss();
adapter = new CustomAdapter(getActivity(), mCallback, name_list, idlist, multiMaphsmap,subcategoryID_HasmapList);
recyclerView.setAdapter(adapter);
//
}
@Override
public void notifyError(VolleyError error) {
error.printStackTrace();
//dismiss CatDialog is showing already
if (dialog.isAdded())dialog.dismiss();
}
};
}
private void HaspMapSetMethod(String category_id, String subcatname) {
multiMaphsmap.put(category_id, subcatname);
}
@Override
public void onItemClicked(int position) {
Toast.makeText( getActivity(),"Click"+position,Toast.LENGTH_LONG ).show();
}
}
这是我的CustomAdapter,从那里我必须调用下一个片段
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
private Multimap<String, String> multiMaphsmap;
private ArrayList<String> idlist ;
private ArrayList<String> name_list;
private static final String font = "Billabong.ttf";
private Context ctx;
private ArrayList<String> subcategoryList;
private HashMap<String, String> subcategoryID_HasmapList;
AdapterInterface adaptercallback;
public static String ID;
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textViewName;
ImageView imageViewIcon;
private FragmentManager mFragmentManager;
public MyViewHolder(View itemView) {
super(itemView);
this.textViewName = itemView.findViewById(R.id.textViewName);
this.imageViewIcon = itemView.findViewById(R.id.imageView);
// on item click
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// get position
int pos = getAdapterPosition();
// check if item still exists
if (pos != RecyclerView.NO_POSITION) {
subcategoryList.clear();
for (Map.Entry<String, String> entry : multiMaphsmap.entries()) {
String key = entry.getKey(), value = entry.getValue();
if (key.equalsIgnoreCase(idlist.get(pos))) {
subcategoryList.add(entry.getValue());
}
}
adaptercallback.onItemClicked(pos);
/* Intent i =new Intent(ctx, CategoryActivity.class);
Bundle args = new Bundle();
args.putSerializable("ARRAYLIST",(Serializable) subcategoryList);
i.putExtra("hasmaplist",subcategoryID_HasmapList);
i.putExtra("BUNDLE",args);
Log.e("ID--",idlist.get(pos));
ID=idlist.get(pos);
ctx.startActivity(i);*/
}
}
});
}
}
public CustomAdapter(Context ctx,ArrayList<String> name_list ,ArrayList<String> idlist, Multimap<String, String> multiMaphsmap,HashMap<String, String> subcategoryID_HasmapList) {
this.name_list = name_list;
this.ctx = ctx;
this.idlist=idlist;
this.multiMaphsmap=multiMaphsmap;
this.subcategoryID_HasmapList=subcategoryID_HasmapList;
}
public CustomAdapter(Context ctx, AdapterInterface adaptercallback, ArrayList<String> name_list , ArrayList<String> idlist, Multimap<String, String> multiMaphsmap, HashMap<String, String> subcategoryID_HasmapList) {
this.name_list = name_list;
this.ctx = ctx;
this.adaptercallback = adaptercallback;
this.idlist=idlist;
this.multiMaphsmap=multiMaphsmap;
this.subcategoryID_HasmapList=subcategoryID_HasmapList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cards_layout, parent, false);
subcategoryList=new ArrayList<>();
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int listPosition) {
TextView textViewName = holder.textViewName;
ImageView imageView = holder.imageViewIcon;
final Typeface typeface = Typeface.createFromAsset(ctx.getAssets(), font);
textViewName.setTypeface(typeface);
textViewName.setText(name_list.get(listPosition));
Log.e("Size of list--", name_list.size() + "");
//imageView.setImageResource(dataSet.get(listPosition).getImage());
}
@Override
public int getItemCount() {
return name_list.size();
}
}
我试图在项目单击上获取回调单击侦听器,但获取回调null错误也不起作用,不知道为什么。我发现getChildFragmentManger运作良好,但是我无法在片段中获得位置,因为getChildFragmentManger()仅从片段而不是从适配器调用。我尝试的另一种方法是直接用Viewpager替换片段,但出现错误viewID空类型