首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在滑动标签片段之间传递对象

在滑动标签片段之间传递对象
EN

Stack Overflow用户
提问于 2017-05-07 00:52:04
回答 1查看 34关注 0票数 0

我有两个片段,并在滑动选项卡中使用它,我希望将对象从片段(1)传递到片段(2),该对象来自(Web服务)。

此活动负责选项卡

代码语言:javascript
运行
复制
   public class ChartActivity extends AppCompatActivity {

private static final String TAG="ChartActivity";

private ViewPager mPager;

private SlidingTabLayout tabLayout;

private Toolbar toolbarChart;

private TextView txtToolbar;

private AdapterTabs adapterTabs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chart);
    Log.e(TAG,"starting to Create Chart");
    setupToolBar();
    setupTabs();
}



// setup ToolBar
public void setupToolBar() {
    toolbarChart = (Toolbar) findViewById(R.id.app_bar_chart); // get instance from view
    setSupportActionBar(toolbarChart);  // set Toolbar in supporting ActionBar
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    txtToolbar=(TextView)toolbarChart.findViewById(R.id.toolbar_title);
    txtToolbar.setText("Dashboard");
}

public void setupTabs(){
    tabLayout=(SlidingTabLayout)findViewById(R.id.tabs);
    mPager=(ViewPager)findViewById(R.id.viewPager);
    adapterTabs= new AdapterTabs(this,getSupportFragmentManager());
    mPager.setAdapter(adapterTabs);
    tabLayout.setDistributeEvenly(true);
    tabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
        @Override
        public int getIndicatorColor(int position) {
            return getResources().getColor(R.color.colorAccent);
        }
    });
    tabLayout.setViewPager(mPager);
}

public AdapterTabs getAdapterTabs() {
    return adapterTabs;
}

 }

此片段(1)

代码语言:javascript
运行
复制
   public class InpatientFragment extends Fragment {


private final static String INPATIENT_STATE="inpatient";

public final static String OutPatient_STATE="outpatient";

private RequestQueue request;

private PieChart chart;

ArrayList<Patient> inpatients;

ArrayList<Patient> outPatient; //outPatient=====> show it in fragment(2)

private ProgressDialog progressDialog;

private VolleySingleton singleton;

private final static String TAG = "InpatientFragment";

public InpatientFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    progressDialog = new ProgressDialog(getActivity());
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Load Data...");
    requsetDatachart();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View layout = inflater.inflate(R.layout.fragment_inpatient, container, false);
    chart = (PieChart) layout.findViewById(R.id.pieChart);
    chart.setCenterTextSize(10);
    chart.setCenterText("Inpatient");
    chart.setDrawEntryLabels(true);
    chart.setHoleRadius(2.5f);
    return layout;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
}

private void requsetDatachart() {
    singleton = VolleySingleton.getInstance();
    request = singleton.getRequestQueue();
    progressDialog.show();
    JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET, MyApplication.APP_URL + "api/getOverview", null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    inpatients = PatientParser.parserJsonPatient(response, "INPATIENT", 1);
                    Log.e(TAG, inpatients.size()+"");
                    outPatient=PatientParser.parserJsonPatient(response,"OUTPATIENT",0);
                    addDataToChart(inpatients);
                    progressDialog.dismiss();

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, error.getMessage());
            progressDialog.dismiss();

        }
    });
    request.add(objectRequest);
}

public void addDataToChart(List<Patient> patients){
    ArrayList<PieEntry>pieEntries=new ArrayList<>();
    for (int i=0;i<patients.size();i++){
        pieEntries.add(new PieEntry(Float.parseFloat(patients.get(i).getResult_val()),patients.get(i).getName_en()));
    }

    // add color to data set
    ArrayList<Integer> colors=new ArrayList<>();
    colors.add(Color.BLUE);
    colors.add(Color.GREEN);
    colors.add(Color.YELLOW);
    // form data set slicing between containing and size of text
    PieDataSet dataSet=new PieDataSet(pieEntries,"InPatient");
    dataSet.setSliceSpace(3);
    dataSet.setValueTextSize(13);
    dataSet.setColors(colors);
    /// form of chart through legend object
    Legend legend=chart.getLegend();
    legend.setForm(Legend.LegendForm.CIRCLE);
    // set data set to pieData
    PieData data=new PieData(dataSet);
    chart.setData(data);
    chart.invalidate();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList(INPATIENT_STATE,inpatients);
}


 }

而这个片段2我想在片段(1)中显示这个片段Outpatient==>列表中的对象。

代码语言:javascript
运行
复制
 public class OutpatientFragment extends Fragment {


private final static String TAG = "OutpatientFragment";

private static final String ARG_PARAM1 = "param1";

ArrayList<Patient> outPatient;

private RequestQueue request;

private PieChart chart;

private ProgressDialog progressDialog;

private VolleySingleton singleton;



public OutpatientFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View layout=inflater.inflate(R.layout.fragment_outpatient, container, false);
    //getArguments().getBundle(InpatientFragment.OutPatient_STATE).getParcelableArrayList();
    chart = (PieChart) layout.findViewById(R.id.pieChart);
    chart.setCenterTextSize(10);
    chart.setCenterText("Outpatient");
    chart.setDrawEntryLabels(true);
    chart.setHoleRadius(2.5f);
    return layout;
}

@Override
public void onResume() {
    super.onResume();

}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    progressDialog = new ProgressDialog(getActivity());
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Load Data...");
    }


  }
EN

回答 1

Stack Overflow用户

发布于 2017-05-07 03:44:08

我认为你可以使用EventBus来实现它。例如

InpatientFragment中,接收数据时调用EventBus.getDefault().post(new MessageEvent(<Your object>))

例如,在用于接收数据OutpatientFragment创建方法中

代码语言:javascript
运行
复制
@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43823030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档