3

我对 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,以便我可以使用它传递给下一个活动。

非常感谢。

4

2 回答 2

9

(在我脑海中)试试这个:

((DistrictModel)lv.getAdapter().getItem(position)).getDistrictId();
于 2011-10-11T19:51:31.443 回答
1

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

例如(这里有一些额外的例子):

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
}
于 2011-10-11T19:41:34.513 回答