I am learning android. I have got one source code from codecanyon. I am facing one error in it like below.
android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment
My Activity in which I am getting error is like below
public class HomeActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener{
private ViewPager viewPager;
private BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
ButterKnife.bind(this);
Activity mActivity = this;
viewPager = findViewById(R.id.viewpager);
bottomNavigationView = findViewById(R.id.bottomNavigationView);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
setupViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position == 0){
bottomNavigationView.setSelectedItemId(R.id.menuHome);
}else if(position == 1){
bottomNavigationView.setSelectedItemId(R.id.menuAccount);
}else{
bottomNavigationView.setSelectedItemId(R.id.menuSetup);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
SharedPreferences pref = mActivity.getSharedPreferences("setting", MODE_PRIVATE);
int membership = pref.getInt("membership", 1);
if(membership == 0) {
if (!HomeActivity.this.isFinishing()) {
AlertManager.createCallbackAlert(mActivity, "Warning", "Trial expired if premium not purchased your account history will be deleted in 3 days", false, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}, "BUY", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
viewPager.setCurrentItem(1);
}
});
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new StateFragment(), "HOME");
adapter.addFragment(new AccountFragment(), "ACCOUNT");
adapter.addFragment(new SetupFragment(), "SETUP");
viewPager.setAdapter(adapter);
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.menuHome:
viewPager.setCurrentItem(0);
break;
case R.id.menuAccount:
viewPager.setCurrentItem(1);
break;
case R.id.menuSetup:
viewPager.setCurrentItem(2);
break;
}
return true;
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
and my Fragment is like below
@SuppressLint("ValidFragment")
public class Weekly extends Fragment {
AccountType accountType;
@SuppressLint("ValidFragment")
public Weekly(AccountType accountType) {
this.accountType = accountType;
}
TextView tvSubType;
TextView tvSubDesc;
private ItemClickListner itemClickListner;
public interface ItemClickListner {
void onItemClick(int postion);
}
public void setItemClickListner(ItemClickListner itemClickListner) {
this.itemClickListner = itemClickListner;
}
Button btnPurchase;
private static final String TAG = "Weekly";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.weekly_subscption, null, false);
tvSubType = inflate.findViewById(R.id.tvSubType);
btnPurchase = inflate.findViewById(R.id.btnPurchase);
tvSubType.setText(accountType.getType());
tvSubDesc = inflate.findViewById(R.id.tvSubDesc);
tvSubDesc.setText(accountType.getDesc());
btnPurchase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
accountType.itemClickListner.onItemClick(accountType.getIndex());
}
});
return inflate;
}
}
My AccountType class is like below
public class AccountType {
String type;
String desc;
int index;
MembershipFragment.ItemClickListner itemClickListner;
public AccountType(String type, String desc, int index, MembershipFragment.ItemClickListner itemClickListner) {
this.type = type;
this.desc = desc;
this.index = index;
this.itemClickListner = itemClickListner;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public MembershipFragment.ItemClickListner getItemClickListner() {
return itemClickListner;
}
public void setItemClickListner(MembershipFragment.ItemClickListner itemClickListner) {
this.itemClickListner = itemClickListner;
}
}
Let me know if someone can help me for come out from this error. If its simple, please forgive me because I am trying to fix it from last one and half hour but I am not able to do it. Thanks a lot.