OnItemClickListener从模型中获取数据

时间:2011-10-11 19:35:07

标签: android onitemclicklistener

我是Android开发的新手,我正在尝试构建一个ListView,它使用gson从Web服务获取数据。我有一个模型类,一个列表类,一个适配器类和活动类。

列表工作正常,它获得了数据,现在我想将OnItemClickListener集成到它并将数据传递给第二个活动。我想得到项ID(DistrictId)并将其传递给下一个Activity(listView)而不是行id。如果有人可以向我展示光明,那就太好了......因为文档不是很清楚,因为我是新手。

以下是我的代码。

模型类

package com.sample.myapp;

public class DistrictModel {
private String id;
private String districtName;

public String getDistrictId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getDistrictName(){
    return districtName;
}
public void setDistrictEN(String districtName){
    this.districtName = districtName;
}
}

列表类

public class DistrictList {
private List<DistrictModel> districts;

public List<DistrictModel> getDistricts(){
    return districts;
}
public void setDistrictList(List<DistrictModel> districts){
    this.districts = districts;
}
} 

适配器类

public class DistrictAdapter extends ArrayAdapter<DistrictModel>{
int resource;
String response;
Context context;
private LayoutInflater dInflater;

public DistrictAdapter(Context context, int resource, List<DistrictModel> objects) {
        super(context, resource, objects);
        this.resource = resource;
        dInflater = LayoutInflater.from(context);
}

static class ViewHolder {
    TextView title;
}
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;
    //Get the current location object
    DistrictModel lm = (DistrictModel) getItem(position);

    //Inflate the view
    if(convertView==null)
    {
        convertView = dInflater.inflate(R.layout.item_district, null);
        holder = new ViewHolder();
        holder.title = (TextView) convertView
                .findViewById(R.id.district_name);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.title.setText(lm.getDistrictName());

    return convertView;
}
}

活动类

public class DistrictListActivity extends Activity{
LocationManager lm;

ArrayList<DistrictModel> districtArray = null;
DistrictAdapter districtAdapter;
DistrictList list;

ListView lv;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.districtlist_layout);

    lv = (ListView) findViewById(R.id.list_district);

    districtArray = new ArrayList<DistrictModel>();
    districtAdapter = new DistrictAdapter(DistrictListActivity.this, R.layout.item_district, districtArray);

    lv.setTextFilterEnabled(true);
            lv.setAdapter(districtAdapter);

            try {
                new DistrictSync().execute("http://aws.something.com/service");
            } catch(Exception e) {}

    lv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View convertView, int position, long id) {
                AlertDialog.Builder adb=new AlertDialog.Builder(DistrictListActivity.this);
                adb.setTitle("LVSelectedItemExample");
                adb.setMessage("Selected Item is = "+(lv.getItemIdAtPosition(position)));
                adb.setPositiveButton("Ok", null);
                adb.show();

                }
        }); **//i'd like to get the DistrictId from the json data.**
}



private class DistrictSync extends AsyncTask<String, Integer, DistrictList> {

    protected DistrictList doInBackground(String... urls) {
        DistrictList list = null;
        int count = urls.length;

        for (int i = 0; i < count; i++) {
            try {           
                // ntar diganti service
                RestClient client = new RestClient(urls[i]);

                try {
                    client.Execute(RequestMethod.GET);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                String json = client.getResponse();

                list = new Gson().fromJson(json, DistrictList.class);

                //
            } catch(Exception e) {}
        }
        return list;
    }

    protected void onProgressUpdate(Integer... progress) {

    }

    protected void onPostExecute(DistrictList dislist) {

        for(DistrictModel lm : dislist.getDistricts())
        {
            districtArray.add(lm);
        }
        districtAdapter.notifyDataSetChanged();
    }

}
}

出于测试目的,现在我点击它将显示行id的行,所以我知道onclick监听器工作,但我只是想让它抓住我的DistrictId所以我可以用它来传递给下一个活动。

非常感谢你。

2 个答案:

答案 0 :(得分:9)

(从我的脑海中)试试这个:

((DistrictModel)lv.getAdapter().getItem(position)).getDistrictId();

答案 1 :(得分:1)

通常,当您想要将数据从一个Activity传递到另一个Intent时,只需将其放入用于创建新Activity的{​​{1}}。

例如(和here are some additional examples):

Intent i = new Intent(context, MyNewActivity.class);
i.putExtra("MyCurrentHealth", mCurrentHealth);
context.startActivity(i);

要检索数据,请执行以下操作:

Bundle extras = getIntent().getExtras();
if (extra != null) {
   ... // Do stuff with extras
}