2016-10-18 6 views
0

問題は、フラグメントクラスを複数回(異なる引数を持つすべてのユーザー)呼び出していて、後でこの引数を思い出して処理する必要があることです。しかし、私が必要とするときにこの引数を呼び出すたびに、私は明示的に異なる引数で呼び出すのですが、すべてのフラグメントで同じです!TabLayout内のAndroidで同じタグXMLを複数回使用した同じフラグメントXML

ここで問題を理解するのに役立つコードがあります。

NewStudentActivity:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_student); 

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    tabLayout = (TabLayout) findViewById(R.id.tabs); 

    fab = (FloatingActionButton) findViewById(R.id.fab_new_student); 

    UserDataFragment frag = new UserDataFragment(); 
    frag.show(getSupportFragmentManager(), "user_data"); 

    measurementList = new SparseArray<>(4); 

    //... 

    private void setupViewPager (ViewPager viewPager){ 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 

    if (calcMethod == Utility.PETROVSKI){ 
     if (userGender == Utility.GENDER_MALE){ 


      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUBESCAPULAR), 
        Utility.MEASUREMENT_SUBESCAPULAR); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_TRICIPITAL), 
        Utility.MEASUREMENT_TRICIPITAL); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUPRAILIACA), 
        Utility.MEASUREMENT_SUPRAILIACA); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_PANTURRILHA), 
        Utility.MEASUREMENT_PANTURRILHA); 

     } else if (userGender == Utility.GENDER_FEMALE) { 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_AXILAR), 
        Utility.MEASUREMENT_AXILAR); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUPRAILIACA), 
        Utility.MEASUREMENT_SUPRAILIACA); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_COXA), 
        Utility.MEASUREMENT_COXA); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_PANTURRILHA), 
        Utility.MEASUREMENT_PANTURRILHA); 

     } else { 
      finish(); 
     } 
    } else if (calcMethod == Utility.GUEDES) { 
     if (userGender == Utility.GENDER_MALE){ 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUBESCAPULAR), 
        Utility.MEASUREMENT_SUBESCAPULAR); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_ABDOMINAL), 
        Utility.MEASUREMENT_ABDOMINAL); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUPRAILIACA), 
        Utility.MEASUREMENT_SUPRAILIACA); 

     } else if (userGender == Utility.GENDER_FEMALE) { 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_COXA_PROXIMAL), 
        Utility.MEASUREMENT_COXA_PROXIMAL); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUPRAILIACA), 
        Utility.MEASUREMENT_SUPRAILIACA); 
      adapter.addFragment(MeasurementFragment.newInstance(Utility.MEASUREMENT_SUBESCAPULAR), 
        Utility.MEASUREMENT_SUBESCAPULAR); 

     } else { 
      finish(); 
     } 
    } else { 
     finish(); 
    } 

    viewPager.setAdapter(adapter); 
} 

ViewPagerAdapter:

class ViewPagerAdapter extends FragmentPagerAdapter{ 
    private final List<Fragment> fragmentList = new ArrayList<>(); 
    private final List<String> fragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager){ 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position){ 
     return fragmentList.get(position); 
    } 

    @Override 
    public int getCount(){ 
     return fragmentList.size(); 
    } 

    public void addFragment (Fragment fragment, String title){ 
     fragmentList.add(fragment); 
     fragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentTitleList.get(position); 
    } 

} 

MeasurementFragment:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState){ 
    view = inflater.inflate(R.layout.fragment_measurement, container, false); 

    measurement1 = (EditText) view.findViewById(R.id.te_first_measurement); 
    measurement2 = (EditText) view.findViewById(R.id.te_second_measurement); 
    measurement3 = (EditText) view.findViewById(R.id.te_third_measurement); 
    median = (EditText) view.findViewById(R.id.mediana); 
    median.setKeyListener(null); 

    btn_check = (AppCompatButton) view.findViewById(R.id.btn_check_measurements); 

    btn_check.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      returnValues(); 
     } 
    }); 

    return view; 
} 

public static MeasurementFragment newInstance(String measurement){ 
    MeasurementFragment frag = new MeasurementFragment(); 
    Bundle args = new Bundle(); 

    arg = measurement; 

    args.putString(ARG_MEASUREMENT, measurement); 

    frag.setArguments(args); 
    return frag; 
} 

private void returnValues(){ 
    if (checkMedian()){ 
     Bundle data = new Bundle(); 

     receiver = (MeasurementFinished) getActivity(); 

     data.putString("measurement", arg); 
     data.putDouble("mediana", median_value); 
     data.putDouble("measurement1", first_measurement_value); 
     data.putDouble("measurement2", second_measurement_value); 
     data.putDouble("measurement3", third_measurement_value); 

     receiver.onMeasurementFinished(data); 
    } 
} 

答えて

1

あなたがnewInstancereturnValuesに表示argのあなたの宣言を示すが、以降はありませんあなたはstatiでそれを使用しています静的フィールドでなければなりません。

つまり、クラスごとに1つしかないことを意味します。つまり、arg = measurementと言うときは、同じフィールドに異なる値を繰り返し割り当てます。だからこそ、あなたはたった一つの価値しか見ないのです。

public static MeasurementFragment newInstance(String measurement){ 
    MeasurementFragment frag = new MeasurementFragment(); 
    Bundle args = new Bundle(); 

    // don't use the static arg here 
    args.putString(ARG_MEASUREMENT, measurement); 

    frag.setArguments(args); 
    return frag; 
} 

private void returnValues(){ 
    if (checkMedian()){ 
     Bundle data = new Bundle(); 

     receiver = (MeasurementFinished) getActivity(); 
     // this is how you get a value set with setArguments 
     String measurement = getArguments().getString(ARG_MEASUREMENT); 
     data.putString("measurement", measurement); 
     data.putDouble("mediana", median_value); 
     data.putDouble("measurement1", first_measurement_value); 
     data.putDouble("measurement2", second_measurement_value); 
     data.putDouble("measurement3", third_measurement_value); 

     receiver.onMeasurementFinished(data); 
    } 
} 
+0

それは動作します:

はこれを試してみてください!ありがとう! –

関連する問題