[英]How can i get selected Tab name on loading Pager fragment in android
我的所有标签仅使用一个片段。 但是我无法将选定的选项卡名称传递给片段,因此基于此,我可以加载我的订单明细数据。 我有一个TextView
片段,单击任何选项卡时都需要将其文本更改为选项卡名称。 我的代码如下。
在DateAdapter(PageViewer适配器)中
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;
}
}
在OrderListFragment中(公共片段)
@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;
}
在SalesOrderActivity中(主要活动)
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));
}
}
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);
}
}
您需要将您的DateAdapter更改为以下
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();
}
}
现在您在viewpager方法中添加片段也更改
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);
在片段名称更改中创建函数
void change(String str){
textview.setTest(str);
}
并从SalesOrderActivity调用此函数updateTabTittle
DateAdapter value = (DateAdapter) adapter.getItem(pos);
value.change("")
// pos = fragment postion where you wants to change title
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.