android, java中fragment中的多个旋转器和条件



我试图创建有3个片段(页面)的应用程序。在每个片段我有几个旋转器(选项选择)。用户可以选择不同的选项,根据这些选项的组合,他将看到价格。

我在Main Activity

中使用了以下代码
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import com.example.myapplication.fragments.PageFragment1;
import com.example.myapplication.fragments.PageFragment2;
import com.example.myapplication.fragments.PageFragment3;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {

private ViewPager pager;
private PagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Fragment> list = new ArrayList<>();
list.add(new PageFragment1());
list.add(new PageFragment2());
list.add(new PageFragment3());
pager = findViewById(R.id.pager);
pagerAdapter = new SlidePageAdapter(getSupportFragmentManager(),list);
pager.setAdapter(pagerAdapter);
}
}

和PageAdapter

中的以下代码
package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List;
public class SlidePageAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragmentList;
public SlidePageAdapter(FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}

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

and in PageFragment1

package com.example.myapplication.fragments;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.PagerAdapter;
import com.example.myapplication.R;
import com.google.android.material.navigation.NavigationBarView;

public class PageFragment1 extends Fragment {

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

Spinner spinner1 = (Spinner) rootView.findViewById(R.id.spinnerMarket);
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(getActivity(), R.array.Market, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);
Spinner spinner2 = (Spinner) rootView.findViewById(R.id.spinnerEmission);
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(getActivity(), R.array.Emissions, android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter2);
Spinner spinner3 = (Spinner) rootView.findViewById(R.id.spinnerAxles);
ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(getActivity(), R.array.Axles, android.R.layout.simple_spinner_item);
adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner3.setAdapter(adapter3);
Spinner spinner4 = (Spinner) rootView.findViewById(R.id.spinnerGearbox);
ArrayAdapter<CharSequence> adapter4 = ArrayAdapter.createFromResource(getActivity(), R.array.Gearbox, android.R.layout.simple_spinner_item);
adapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner4.setAdapter(adapter4);
Spinner spinner5 = (Spinner) rootView.findViewById(R.id.spinnerFrontSuspension);
ArrayAdapter<CharSequence> adapter5 = ArrayAdapter.createFromResource(getActivity(), R.array.FrontSuspension, android.R.layout.simple_spinner_item);
adapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner5.setAdapter(adapter5);
Spinner spinner6 = (Spinner) rootView.findViewById(R.id.spinnerRearSuspension);
ArrayAdapter<CharSequence> adapter6 = ArrayAdapter.createFromResource(getActivity(), R.array.RearSuspension, android.R.layout.simple_spinner_item);
adapter6.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner6.setAdapter(adapter6);
Spinner spinner7 = (Spinner) rootView.findViewById(R.id.spinnerTrailAxle);
ArrayAdapter<CharSequence> adapter7 = ArrayAdapter.createFromResource(getActivity(), R.array.TrailAxle, android.R.layout.simple_spinner_item);
adapter7.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner7.setAdapter(adapter7);

spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
int position, long id) {
//Some conditions for all spinners//
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});

return rootView;
}
}

问题是我有7个旋转器,价格计算的条件是相同的。所以我必须把相同的代码为每个旋转,所以程序将调整价格每次用户选择不同的选项。我觉得有点奇怪,因为这个项目越来越庞大了。我还有两个同样结构的片段。我试着把一些东西放在下面,而不是每个旋转器

的代码
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//conditions//
}

但是在fragment中不起作用。我在编码绝对是新的,所以你能给我详细的建议吗?

您可以通过重用视图初始化逻辑和侦听器来压缩逻辑。首先,创建一个单独的侦听器类:

class CustomSpinnerItemSelectedListener implements AdapterView.OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// You can customize the logic per spinner using either the view or the id
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}

然后在片段中,将视图id保存在数组中,遍历该数组并执行相同的视图初始化逻辑,如下所示:

public class PageFragment1 extends Fragment {
private static int[] VIEW_IDS = {
R.id.spinnerMarket,
R.id.spinnerEmission,
...
};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.page_1, container, false);

CustomSpinnerItemSelectedListener listener = new CustomSpinnerItemSelectedListener();
for (int id: VIEW_IDS) {
Spinner spinner = (Spinner) rootView.findViewById(id);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.Market, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(listener);
}
}
}