Reputation: 1
I'm using only one fragment for my all tabs.
But I couldn't pass selected tab name to my fragment, so based on that I can load my order details data. I have a TextView
in fragment, I need to change its text to tab name whenever I click on any tab.
My code is as below.
In DateAdapter(PageViewer Adapter)
public class DateAdapter extends FragmentStatePagerAdapter {
private Context context;
int tabCount;
Integer Index;
public DateAdapter(FragmentManager fm) {
super(fm);
}
public DateAdapter(FragmentManager fm, Context context, int tabCount) {
super(fm);
this.context = context;
this.tabCount = tabCount;
}
@Override
public Fragment getItem(int i) {
OrderListFragment oneFragment = new OrderListFragment();
SalesOrderListActivity salesOrderListActivity=new SalesOrderListActivity();
return oneFragment.newInstance("Tabname", "");
}
@Override
public int getCount() {
return tabCount;
}
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
}
In OrderListFragment (Common Fragment)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_order_list, container, false);
title=(TextView)view.findViewById(R.id.tabtitle);
salesorderrecycle = (RecyclerView) view.findViewById(R.id.salesorderrecycle);
salesorderrecycle.setHasFixedSize(true);
salesorderrecycle.setLayoutManager(new LinearLayoutManager(getActivity()));
ApiInterface apiInterface = APIClient.getClient().create(ApiInterface.class);
Call<ArrayList<SalesOrder>> call = apiInterface.GetordersList( loginModel.getUserId());
call.enqueue(new Callback<ArrayList<SalesOrder>>() {
@Override
public void onResponse(Call<ArrayList<SalesOrder>> call, Response<ArrayList<SalesOrder>> response) {
adapter = new SalesOrderAdapter(getActivity(), response.body());
adapter.Datefilter("04/09/2019");//Need to give here Tab title value
salesorderrecycle.setAdapter(adapter);
((SalesOrderListActivity)getActivity()).SetCountText(adapter.getItemCount());
((SalesOrderListActivity)getActivity()).SetAmountText(adapter.getTotalAmount());
}
@Override
public void onFailure(Call<ArrayList<SalesOrder>> call, Throwable t) {
Toast.makeText(getActivity(),"Connection Failure",Toast.LENGTH_LONG).show();
}
});
return view;
}
In SalesOrderActivity (Main Activity)
public class SalesOrderListActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
TextView toolbarText,orderamount,ordercount;
ImageView back_img;
public Integer OrderCount;
public SalesOrderAdapter listadapter;
TabLayout tablayout;
ViewPager viewpager;
public String TabName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sales_order_list);
toolbarText=findViewById(R.id.toolbarText);
toolbarText.setText("Sale Orders");
back_img=findViewById(R.id.back_img);
tablayout=(TabLayout)findViewById(R.id.tablayout);
viewpager=(ViewPager) findViewById(R.id.viewpager);
orderamount=findViewById(R.id.orderamount);
ordercount=findViewById(R.id.ordercount);
Calendar calendar=Calendar.getInstance();
Date Today = calendar.getTime();
SimpleDateFormat df = new SimpleDateFormat("dd MMM \n EEEE");
String formattedToday = df.format(Today);
tablayout.addTab(tablayout.newTab().setText(formattedToday));
for(int i=1;i<=30;i++){
calendar.add(calendar.DATE,-1);
Date newDate = calendar.getTime();
String formattedDate = df.format(newDate);
tablayout.addTab(tablayout.newTab().setText(formattedDate));
}
tablayout.setTabGravity(TabLayout.GRAVITY_FILL);
DateAdapter adapter=new DateAdapter(getSupportFragmentManager(), this,tablayout.getTabCount());
viewpager.setAdapter(adapter);
viewpager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tablayout));
tablayout.setOnTabSelectedListener(this);
back_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
OrderListFragment orderListFragment=new OrderListFragment();
TabName=tab.getText().toString();
Toast.makeText(getApplicationContext(),"1st"+TabName,Toast.LENGTH_SHORT).show();
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
public void SetCountText(Integer count){
ordercount.setText(count.toString());
}
public void SetAmountText(Double amt){
orderamount.setText(String.format("%.2f",amt));
}
}
Upvotes: 0
Views: 2348
Reputation: 545
you needs to change you DateAdapter As bellow
public class DateAdapter extends FragmentStatePagerAdapter {
private Context context;
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public DateAdapter(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size;
}
@Override
public int getItemPosition(Object object) {
return PagerAdapter.POSITION_NONE;
}
public updateTabTittle(int pos, String value){
mFragmentTitleList.get(pos) = value;
notifydatasetchanged();
}
}
now you add fragments in viewpager method also change
DateAdapter adapter=new DateAdapter(getSupportFragmentManager());
adapter.addFragment(new OrderListFragment(), "Title for First Fragment"
);
adapter.addFragment(new OrderListFragment(), "Title for second
Fragment" );
adapter.addFragment(new OrderListFragment(), "Title for third Fragment"
);
viewpager.setAdapter(adapter);
create function in fragment name change
void change(String str){
textview.setTest(str);
}
and call this function updateTabTittle from SalesOrderActivity
DateAdapter value = (DateAdapter) adapter.getItem(pos);
value.change("")
// pos = fragment postion where you wants to change title
Upvotes: 0
Reputation: 719
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class TabAdapter extends FragmentStatePagerAdapter {
List<MyTabFragments> fragmentlist;
public TabAdapter(FragmentManager fm, List<MyTabFragments> fragmentlist ) {
super(fm);
this.fragmentlist = fragmentlist;
}
@Override
public Fragment getItem(int position) {
return fragmentlist.get(position);
}
@Override
public int getCount() {
return fragmentlist.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentlist.get(position).getArguments().getString("title");
}
}
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MyTabFragments extends Fragment {
String title;
public static MyTabFragments getInstances(String title) {
MyTabFragments ob1 = new MyTabFragments();
Bundle bundle = new Bundle();
bundle.putString("title", title);
ob1.setArguments(bundle);
ob1.pass(title);
return ob1;
}
public void pass(String title) {
this.title = title;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
// You can use title
}
}
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import com.podamibe.merolagani.R;
import java.util.ArrayList;
import java.util.List;
public class MyActivity extends AppCompatActivity {
ViewPager viewpage;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.id.your_view);
viewpage = findViewById(R.id.your_view_pager);
List<MyTabFragments> fragmentlist = new ArrayList<>();
MyTabFragments ob1 = MyTabFragments.getInstances("Simple title first");
MyTabFragments ob2 = MyTabFragments.getInstances("Simple title Second");
MyTabFragments ob3 = MyTabFragments.getInstances("Simple title third");
fragmentlist.add(ob1);
fragmentlist.add(ob2);
fragmentlist.add(ob3);
TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), fragmentlist);
viewpage.setAdapter(adapter);
}
}
Upvotes: 1