OnItemClickListener получает данные из модели - PullRequest
3 голосов
/ 11 октября 2011

Я довольно новичок в разработке для Android и пытаюсь создать ListView, который получает данные из веб-службы с помощью gson. У меня есть класс модели, класс списка, класс адаптера и класс активности.

Список работает нормально, он получил данные, и теперь я хочу интегрировать в него OnItemClickListener и передать данные во 2-е действие. И я хотел бы получить идентификатор элемента (DistrictId) и передать его следующей операции (listView) вместо идентификатора строки. Было бы замечательно, если бы кто-то мог показать мне свет ... поскольку документация не так ясна для понимания и потому, что я новичок.

Ниже мой код.

Модель класса

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();
    }

}
}

В целях тестирования, теперь я щелкаю по строке, где будет показан идентификатор строки, поэтому я знаю, что слушатель onclick работает, но я просто хочу, чтобы он захватил мне DistrictId, чтобы я мог использовать его для перехода к следующему действию.

Большое спасибо.

Ответы [ 2 ]

9 голосов
/ 11 октября 2011

(из моей головы) Попробуйте это:

((DistrictModel)lv.getAdapter().getItem(position)).getDistrictId();
1 голос
/ 11 октября 2011

Обычно, когда вы хотите передать данные от одного Activity к другому, вы просто помещаете их в Intent, который вы используете для создания нового Activity.

Например (и * 1006).* вот несколько дополнительных примеров ):

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...