[英]Passing the total value from multiple spinner from a fragment to textview of another fragment
所以我需要从多个微调器中获取值以将其求和并将其传递给另一个片段。 总值的传递会在点击“下一步”按钮时传递。 目前,我有一个 TextView 设置为接收总值,但我不知道如何将总值从一个片段传递到另一个片段。
我试过这个但是
这是我尝试执行的代码,用于总结从 4 个微调器检索到的值并将该值传递给另一个片段并将其设置到我的 TextView (score_result)。
*我修改了我的片段 1 和 2 但仍然有 java.lang.NullPointerException 的问题:尝试在空对象引用上调用虚拟方法 'android.view.View android.widget.Spinner.findViewById(int)'
主要活动:
public class MainActivity extends AppCompatActivity{
private AppBarConfiguration appBarConfiguration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
com.example.perceivedstressscale.databinding.ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build();
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_status) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
return NavigationUI.navigateUp(navController, appBarConfiguration)
|| super.onSupportNavigateUp();
}
}
片段 1:
public class FirstFragment extends Fragment implements AdapterView.OnItemSelectedListener{
private FragmentFirstBinding binding;
String selectedSpinnerItemValue;
Spinner spinner1,spinner2,spinner3;
//,spinner4,spinner5,spinner6,spinner7,spinner8,spinner9,spinner10;
@Override
public View onCreateView( @NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
binding = FragmentFirstBinding.inflate(inflater, container, false);
return binding.getRoot();
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.buttonFirst.setOnClickListener(view1 -> {
Bundle bundle = new Bundle();
selectedSpinnerItemValue=valueSum(spinner1,
spinner2,
spinner3);
bundle.putString("selectedSpinnerItemKey", selectedSpinnerItemValue);
Fragment fragment = FirstFragment.newInstance();
fragment.setArguments(bundle);
FragmentTransaction transaction = requireActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.score_result, fragment);
NavHostFragment.findNavController(FirstFragment.this).navigate(R.id.action_FirstFragment_to_SecondFragment,bundle);
});
}
private static Fragment newInstance() {
return new FirstFragment();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
public String valueSum(Spinner i1,Spinner i2,Spinner i3){
int total, int1,int2,int3;
ArrayAdapter adapter=new ArrayAdapter(getContext(), android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
i1.findViewById(R.id.spinner1);
i1.setAdapter(adapter);
i1.setOnItemSelectedListener(this);
i1.getSelectedItem();
i2.findViewById(R.id.spinner2);
i2.setAdapter(adapter);
i2.setOnItemSelectedListener(this);
i2.getSelectedItem();
i3.findViewById(R.id.spinner3);
i3.setAdapter(adapter);
i3.setOnItemSelectedListener(this);
i3.getSelectedItem();
int1=Integer.parseInt(String.valueOf(i1));
int2=Integer.parseInt(String.valueOf(i2));
int3=Integer.parseInt(String.valueOf(i3));
total=int1+int2+int3;
return String.valueOf(total);
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String item=adapterView.getItemAtPosition(i).toString();
Toast.makeText(adapterView.getContext(), item,Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}
片段 2:
public class SecondFragment extends Fragment {
private FragmentSecondBinding binding;
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
binding = FragmentSecondBinding.inflate(inflater, container, false);
//set to receive total value
if (getArguments() != null)
{
String itemFromFirstFragment = getArguments().getString("selectedSpinnerItemKey");
TextView result=requireView().requireViewById(R.id.score_result);
result.setText(itemFromFirstFragment);
}
return binding.getRoot();
}
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.buttonSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NavHostFragment.findNavController(SecondFragment.this)
.navigate(R.id.action_SecondFragment_to_FirstFragment);
}
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
可以有几种方法。
AbcViewModel abcViewModel = new ViewModelProvider(requireActivity()).get(AbcViewModel.class)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.