首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android中使用依赖微调器(多微调器)的问题

android中使用依赖微调器(多微调器)的问题
EN

Stack Overflow用户
提问于 2020-03-09 11:48:51
回答 1查看 103关注 0票数 0

我正在尝试填充上一个微调器的下一个微调器的值。在这种情况下,我所做的是在微调器中生成所有值,无论我在前一个微调器中选择哪个值,它都会在下一个微调器中显示所有值。我使用了五个微调器,它们需要根据前一个来填充值。在这里,我使用了一个用于微调的库。库如下所示。

代码语言:javascript
复制
'com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1'

在这里,我将分享我的整个代码/类,以供您参考。没有错误,我在各自的微调器中获得了所有值,但我希望根据前一个值来获得值。这是我的代码。

代码语言:javascript
复制
import androidx.appcompat.app.AppCompatActivity;
import com.toptoche.searchablespinnerlibrary.SearchableSpinner;

public class Catchment extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

public ArrayAdapter<String> regionAdapter;
public ArrayAdapter<String> districtAdapter;
public ArrayAdapter<String> upzAdapter;
public ArrayAdapter<String> unionAdapter;
public ArrayAdapter<String> villageAdapter;
public String[] Region = {"1", "2",
};
public String[] District = {"1","2","3","4","5","6","7","8",};
public String[] Upz = {"1","2"...."23";
public String[] Union = {"1","2"...."25"..."50"...."115"};
public String[] Village = { "1","2"...."25"..."50"...."150"...."500"...."947"   };
Button catchment_code;
SearchableSpinner spinner_region, spinner_district, spinner_upz, spinner_union, spinner_village;
String[] region_code;
String[] district_code;
String[] upz_code;
String[] union_code;
String[] vill_code;
int positions;
String test;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_catchment);

    spinner_region = (SearchableSpinner) findViewById(R.id.region);
    spinner_district = (SearchableSpinner) findViewById(R.id.district);
    spinner_upz = (SearchableSpinner) findViewById(R.id.upz);
    spinner_union = (SearchableSpinner) findViewById(R.id.union);
    spinner_village = (SearchableSpinner) findViewById(R.id.village);

    catchment_code = findViewById(R.id.catchment_code);


    // Set spninner adapter
    regionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Region);
    districtAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, District);
    upzAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Upz);
    unionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Union);
    villageAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Village);

    //Set dropdown to the spinner
    regionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    districtAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    upzAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    unionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    villageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    //assign to spinner
    spinner_region.setAdapter(regionAdapter);
    spinner_district.setAdapter(districtAdapter);
    spinner_upz.setAdapter(upzAdapter);
    spinner_union.setAdapter(unionAdapter);
    spinner_village.setAdapter(villageAdapter);

    spinner_region.setOnItemSelectedListener(this);
    spinner_district.setOnItemSelectedListener(this);
    spinner_upz.setOnItemSelectedListener(this);
    spinner_union.setOnItemSelectedListener(this);
    spinner_village.setOnItemSelectedListener(this);
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    if (parent.getId() == R.id.region) {
        positions = spinner_region.getSelectedItemPosition();
        region_code = this.getResources().getStringArray(R.array.region_code);
        //Toast.makeText(this, region_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (parent.getId() == R.id.district) {
        positions = spinner_district.getSelectedItemPosition();
        district_code = this.getResources().getStringArray(R.array.district_code);
        //Toast.makeText(this, district_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (parent.getId() == R.id.upz) {
        positions = spinner_upz.getSelectedItemPosition();
        upz_code = this.getResources().getStringArray(R.array.upz_code);
        //Toast.makeText(this, upz_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (parent.getId() == R.id.village) {
        positions = spinner_village.getSelectedItemPosition();
        vill_code = this.getResources().getStringArray(R.array.village_code);
        //Toast.makeText(this, vill_code[positions], Toast.LENGTH_LONG).show();
    }
    if (parent.getId() == R.id.union) {
        positions = spinner_union.getSelectedItemPosition();
        union_code = this.getResources().getStringArray(R.array.union_code);
        //Toast.makeText(this, union_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (!(vill_code == null || region_code == null || district_code == null || upz_code == null ||
            union_code == null)) {
        test = region_code[positions] +
                district_code[positions] +
                upz_code[positions] +
                union_code[positions] + vill_code[positions];
        Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
    }
    catchment_code.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(Catchment.this, Participant_Details.class);
            intent.putExtra("catment_code", test);
            startActivity(intent);


        }
    });

    //Toast.makeText(this, union_code[positions]+upz_code[positions], Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
}

@Override
public void onBackPressed() {
    Intent intent = new Intent(Catchment.this, SplashScreen.class);
    Catchment.this.startActivity(intent);
    Catchment.this.finish();}
}

那么我怎样才能摆脱这个问题呢?我需要帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-03-09 13:25:49

您在onCreate()中一次声明了所有适配器。

相反,只使用onCreate()中的值声明第一个适配器,并使用空值声明其他适配器。

代码语言:javascript
复制
        @Override
    protected void onCreate(Bundle savedInstanceState) {
     --------;
     // Set spninner adapter
        regionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Region);
        districtAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new String[]());
        upzAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new String[]());
        unionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new String[]());
        villageAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new String[]());

------
       spinner_region.setOnItemSelectedListener(this);
}

现在在itemSelectedListener上,如果需要,过滤所需的值,并将这些值添加到下一个所需的适配器,并在将侦听器添加到下一个微调器时通知这些值(添加侦听器取决于您,您希望如何处理这些事情)

代码语言:javascript
复制
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
      if (parent.getId() == R.id.region) {
     positions = spinner_region.getSelectedItemPosition();
     String[] filteredDistrict = District.filter(Region[position]) // District.filter is not any predefined function, assuming some filter needed for selected Districts
     districtAdapter.addValues(filteredDistrict);
     districtAdapter.notifyDataSetChanged()
     spinner_district.setOnItemSelectedListener(this);
}
}

除此之外,过滤逻辑取决于您的用例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60594510

复制
相关文章

相似问题

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