android - 根据 android 中先前的微调器选择填充微调器

标签 android web-services sqlite adt android-spinner

我不熟悉 android 开发,我遇到了一种情况,要根据第一个微调器选择来级联下拉列表。例如,考虑第一个微调器中的一个例子,所有状态数据都是在选择时使用 db helper 类从 Web 服务加载的第一个微调器中的状态名称我需要根据第一个微调器选择的项目的 id(stateid 不是那个微调器的选择的项目 id)从 db 填充第二个微调器,这意味着我需要从所选状态中选择 stateid 并想要过滤基于州的地区。 状态表创建: CREATE TABLE States( StateID INTEGER , StateName VARCHAR) 区表创建:CREATE TABLE Branches(_ID INTEGER PRIMAY KEY,DistrictName VARCHAR,StateID INTEGER)

在此,我曾经使用 arraylist 加载状态数据,并在 spinner1.setOnItemSelectedListener 函数上加载了区域值,但这些值是根据项目在状态微调器中的位置加载的,而不是我需要基于过滤的在分支表的 stateid 上。

这是获取所有状态的代码:

public ArrayList<HashMap<String, String>> getStatesData() {
    ArrayList aList = new ArrayList();
    try {
        Log.e("getStatesData", "Started");
        String selectQuery = "SELECT * FROM States";
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("StateID",
                        cursor.getString(cursor.getColumnIndex("StateID")));
                map.put("StateName", cursor.getString(cursor
                        .getColumnIndex("StateName")));
                aList.add(map);

            } while (cursor.moveToNext());
        }
        cursor.close();
        return aList;

    } catch (Exception e) {
        e.printStackTrace();
        Log.e("getStatesData", "Ended");
        return aList;
    }
}

spinner1.setonitemselectedlistner 事件:

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapt, View v,
                int pos, long id) {
            // TODO Auto-generated method stub

            long spinstate=spinner_state.getSelectedItemId();
    branch_values=sDBController.getStateselectidData(spinstate);
    branch_name_ary.clear();
    for (int i = 0; i < branch_values.size(); i++) {
        String name=branch_values.get(i).get("DistrictName");
        String id=branch_values.get(i).get("StateID");
        branch_name_ary.add(name);
        Log.e("branchesbystates", branch_name_ary.toString());
    }
    ArrayAdapter<String> spinnerArrayAdapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, branch_name_ary);
    spinnerArrayAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_district.setAdapter(spinnerArrayAdapter1);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });

请提出一些基于 stateid 获取地区的解决方案,这可能有助于解决问题。

提前致谢。

最佳答案

如果我是你,我会创建一个这样的国家

public class State {
private String id;
private String name;

public State(String id, String name) {
    this.id = id;
    this.name = name;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return name;
}

getStatesDate 方法是这样的:

public List<State> getStatesData()
{
    List<State> states = new ArrayList<State>();
    try {
        Log.e("getStatesData", "Started");
        String selectQuery = "SELECT * FROM States";
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                String stateId = cursor.getString(cursor.getColumnIndex("StateID"));
                String stateName = cursor.getString(cursor.getColumnIndex("StateName"));
                states.add(new State(stateId, stateName));

            } while (cursor.moveToNext());
        }
        cursor.close();
    } catch (Exception e) {
        e.printStackTrace();
        Log.e("getStatesData", "Ended");
    }

    return states;
}

而 spinner1 onClicklistener 也将是这样的:

spinner1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            State state = (State) spinner1.getSelectedItem();

            String stateId = state.getId();
            String stateName = state.getName();

            //you are very assured that the id matches the name selected and you can proceed from there
        }
    });

希望对你有所帮助。干杯

关于android - 根据 android 中先前的微调器选择填充微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25356709/

相关文章:

sqlite - 结果字段中带有数组的内连接查询

java - 每天仅从 Android ListView 中为用户验证一次

java - 在方法/函数中使用类变量会创建对源的引用而不是重复它?

android - 在 Android 中从基于 SOAP 的 .NET Web 服务接收自定义对象

php - 表结构,每行一个字段 VS 所有数据合一

c++ - SQLite sqlite3pp C++ api:如何将可以在数据库中找到的所有 sqlite3pp::transactions 加载到某个 vector 或集合中?

java.lang.NullPointerException : MapFragment. getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)

android - Chrome Android Angular Contenteditable 在修改前验证输入

windows - 安装 .net 2008 Windows 服务

web-services - REST 搜索接口(interface)和 GET 的幂等性