Java 微调器项目取决于其他微调器的选定项目
我有两个自定义微调器,从第一个微调器的选定项,我必须修改第二个微调器的可用项。例如:如果我在第一个微调器中选择值“Android”,那么在第二个微调器中,我希望看到Android版本的列表。如果我选择“Apple”,我希望看到iOS版本。等等,适用于许多其他操作系统。如果需要,我还可以选择其中的两个或三个,在第二个微调器中,我希望看到在第一个微调器中选择的每个操作系统的所有操作系统版本 到现在为止没问题 问题在于,自定义微调器同时具有TextView和复选框。我想这就是我的麻烦所在。 结果是,我可以选中/取消选中tha SO项目,但在第二个微调器中,我看不到任何内容 当我在第一个微调器中取消选中某个操作系统时,我还没有实现删除操作系统版本的机制,但我认为我可以通过removeAll()来完成 我在下面附上代码 (请原谅我的英语很差……我也在努力提高:’) 还有,OT,你能给我推荐一本适合初学者的好书吗谢谢谢谢大家。) MainActivity.javaJava 微调器项目取决于其他微调器的选定项目,java,android,spinner,Java,Android,Spinner,我有两个自定义微调器,从第一个微调器的选定项,我必须修改第二个微调器的可用项。例如:如果我在第一个微调器中选择值“Android”,那么在第二个微调器中,我希望看到Android版本的列表。如果我选择“Apple”,我希望看到iOS版本。等等,适用于许多其他操作系统。如果需要,我还可以选择其中的两个或三个,在第二个微调器中,我希望看到在第一个微调器中选择的每个操作系统的所有操作系统版本 到现在为止没问题 问题在于,自定义微调器同时具有TextView和复选框。我想这就是我的麻烦所在。 结果是,我
final String[]选择\u SO={
“选择SO”、“安卓”、“iOS”、“微软手机”};
最终喷丝器喷丝头2=FindViewByd(R.id.喷丝头2);
最终ArrayList listSO=新ArrayList();
对于(int i=0;i
MyAdapter.java
公共类MyAdapter扩展了ArrayAdapter{
私有上下文;
私有ArrayList列表状态;
私有MyAdapter MyAdapter;
私有布尔值isFromView=false;
公共MyAdapter(上下文、int资源、列表对象){
超级(上下文、资源、对象);
this.mContext=上下文;
this.listState=(ArrayList)对象;
this.myAdapter=this;
}
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
返回getCustomView(位置、转换视图、父级);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
返回getCustomView(位置、转换视图、父级);
}
公共视图getCustomView(最终int位置、视图转换视图、视图组父视图){
最终持票人;
if(convertView==null){
LayoutInflater layoutInflator=LayoutInflater.from(mContext);
convertView=LayoutFlator.充气(R.layout.spinner_项,空);
holder=新的ViewHolder();
holder.mTextView=(TextView)convertView
.findviewbyd(R.id.text);
holder.mCheckBox=(复选框)convertView
.findViewById(R.id.checkbox);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.mTextView.setText(listState.get(position.getTitle());
//从getview()或用户输入检查天气检查事件火灾
isFromView=true;
holder.mCheckBox.setChecked(listState.get(position.isSelected());
isFromView=false;
如果((位置==0)){
holder.mCheckBox.setVisibility(视图.不可见);
}否则{
holder.mCheckBox.setVisibility(View.VISIBLE);
final String[] select_SO = {
"Select SO", "Android", "iOS", "Microsoft Phone"};
final Spinner spinner2 = findViewById(R.id.spinner2);
final ArrayList<stateVO> listSO = new ArrayList<>();
for (int i = 0; i < select_SO.length; i++) {
stateVO stateVO = new stateVO();
stateVO.setTitle(select_SO[i]);
stateVO.setSelected(false);
listSO.add(stateVO);
}
MyAdapter myAdapter2 = new MyAdapter(semplice.this, 0,
listSO);
spinner2.setAdapter(myAdapter2);
//spinner with OS VERSION
final ArrayList<String> select_version = new ArrayList<String>();
select_version.add("First select OS");
final String[] apple = {"iPhone OS", "iPhone OS 2", "iPhone OS 3", "iOS 4",
"iOS 5", "iOS 6", "iOS 7", "iOS 8", "iOS 9", "iOS 10", "iOS 11",
"iOS 12"};
final String[] android = {"Android 1.5", "Android 1.6", "Android 2.0 / 2.1",
"Android 2.2", "Android 2.3", "Android 3.0", "Android 4.0",
"Android 4.1 / 4.2 / 4.3 ", "Android 4.4", "Android 5.0 / 5.1",
"Android 6.0", "Android 7.0 / 7.1", "Android 8.0 / 8.1",
"Android 9.0"};
final String[] microsoft = {"Windows Phone 7.0", "Windows Phone 7.5 Mango",
"Windows Phone 7.5 Tango", "Windows Phone 7.8",
"Windows Phone 8.0", "Windows Phone 8.1", "Windows Phone 10"};
final Spinner spinner3 = findViewById(R.id.spinner3);
final ArrayList<stateVO> listVersions = new ArrayList<>();
MyAdapter myAdapter3 = new MyAdapter(semplice.this, 0, listVersions);
spinner3.setAdapter(myAdapter3);
spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
int option;
@Override
public void onItemSelected(AdapterView<?> myAdapter, View view,
int position, long id) {
option=position;
if (position == 1) select_version.addAll(Arrays.asList(android));
if (position == 2) select_version.addAll(Arrays.asList(apple));
if (position == 3) select_version.addAll(Arrays.asList(microsoft));
for (int i = 0; i < select_version.size(); i++) {
stateVO stateVO = new stateVO();
stateVO.setTitle(select_version.get(i));
stateVO.setSelected(false);
listVersions.add(stateVO);
}
MyAdapter myAdapter3 = new MyAdapter(semplice.this, 0,
listVersions);
spinner3.setAdapter(myAdapter3);
}
@Override
public void onNothingSelected(AdapterView<?> myAdapter) {
stateVO stateVO = new stateVO();
stateVO.setTitle("First Select SO");
stateVO.setSelected(false);
listVersions.add(stateVO);
MyAdapter myAdapter3 = new MyAdapter(semplice.this, 0,
listVersions);
spinner3.setAdapter(myAdapter3);
}
});
public class MyAdapter extends ArrayAdapter<stateVO> {
private Context mContext;
private ArrayList<stateVO> listState;
private MyAdapter myAdapter;
private boolean isFromView = false;
public MyAdapter(Context context, int resource, List<stateVO> objects) {
super(context, resource, objects);
this.mContext = context;
this.listState = (ArrayList<stateVO>) objects;
this.myAdapter = this;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
LayoutInflater layoutInflator = LayoutInflater.from(mContext);
convertView = layoutInflator.inflate(R.layout.spinner_item, null);
holder = new ViewHolder();
holder.mTextView = (TextView) convertView
.findViewById(R.id.text);
holder.mCheckBox = (CheckBox) convertView
.findViewById(R.id.checkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mTextView.setText(listState.get(position).getTitle());
// To check weather checked event fire from getview() or user input
isFromView = true;
holder.mCheckBox.setChecked(listState.get(position).isSelected());
isFromView = false;
if ((position == 0)) {
holder.mCheckBox.setVisibility(View.INVISIBLE);
} else {
holder.mCheckBox.setVisibility(View.VISIBLE);
}
holder.mCheckBox.setTag(position);
holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag();
if (!isFromView) {
listState.get(position).setSelected(isChecked);
}
}
});
return convertView;
}
private class ViewHolder {
private TextView mTextView;
private CheckBox mCheckBox;
}
}