ListView 与 customView 和 onClickItemListener

发布于 2024-11-27 15:35:58 字数 4471 浏览 2 评论 0原文

我的列表视图有问题...我正在尝试添加 OnClickListener 但仍然不起作用。我想在点击后显示另一个活动。有人可以帮助我吗?我知道有很多示例,但它不适用于我的应用程序,或者我不知道如何在我的示例中使用它...

这是我的 LocationAdapter 类:

public class LocationAdapter extends ArrayAdapter<LocationModel> {

int resource;
String response;
Context context;
private LayoutInflater mInflater;

public LocationAdapter(Context context, int resource, List<LocationModel> objects) {
    super(context, resource, objects);
    this.resource = resource;
    mInflater = LayoutInflater.from(context);
}

static class ViewHolder {
    TextView titleGameName;
    TextView distanceGame;
        }


public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;
    //Get the current location object
    LocationModel lm = (LocationModel) getItem(position);

    //Inflate the view
    if(convertView==null)
    {
        convertView = mInflater.inflate(R.layout.item, null);
        holder = new ViewHolder();
        holder.titleGameName = (TextView) convertView
                .findViewById(R.id.it_location_title);
        holder.distanceGame = (TextView) convertView
                .findViewById(R.id.it_location_distance);

        convertView.setTag(holder);   


     } else  {

         holder = (ViewHolder) convertView.getTag();

    }

    holder.titleGameName.setText(lm.getGameName());
    holder.distanceGame.setText(lm.getGameDistance()+" km");

    return convertView;
}

}

这是我的 mainListView 类:

public class SelectGameActivity extends Activity {
LocationManager lm;
GeoPoint userLocation;

ArrayList<LocationModel> locationArray = null;
LocationAdapter locationAdapter;
LocationList list;

ListView lv;
TextView loadingText;
TextView sprawdz;

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

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

    locationArray = new ArrayList<LocationModel>();
    locationAdapter = new LocationAdapter(SelectGameActivity.this, R.layout.item, locationArray);


    lv.setTextFilterEnabled(true);
    lv.setAdapter(locationAdapter);
    lv.setItemsCanFocus(true);





    String serverName = getResources().getString(R.string.serverAdress);
    ApplicationController AC = (ApplicationController)getApplicationContext();
    String idPlayer = AC.getIdPlayer();
    int latitude = AC.getCurrentPositionLat();
    int longitude = AC.getCurrentPositionLon();
    int maxDistance = 99999999;


    try {
        new LocationSync().execute("myserverName");
    } catch(Exception e) {}







}


//this is connection with json
private class LocationSync extends AsyncTask<String, Integer, LocationList> {

    protected LocationList doInBackground(String... urls) {
        LocationList 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, LocationList.class);

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

    protected void onProgressUpdate(Integer... progress) {

    }

    protected void onPostExecute(LocationList loclist) {

        for(LocationModel lm : loclist.getLocations())
        {
            locationArray.add(lm);
        }
        locationAdapter.notifyDataSetChanged();
    }

}

编辑::我有第二个问题...我想从项目中获取ID(项目是从json url下载的)这是我的列表:

在此处输入图像描述

我想获取例如:第一项的 ID:159 并将其发送到 nextActivity。

我还有controllerClass.java,我在其中设置和获取selectedIdGame:

    public String getIdGameSelected() {

    return idGame;
}

public void setIdGameSelected(String idGame) {

    this.idGame = idGame;
}

这是个好主意吗?感谢您的帮助。

好的,完成了。我用过:

   public void onItemClick(AdapterView<?> a, View
                                v, int position, long id) {


            String idGame = (String) ((TextView) v.findViewById(R.id.idGameSelected)).getText();

谢谢,米哈尔。

i have problem with listview... i'm trying to add OnClickListener but in still doesn't work. I want to display another activity after click. Can somebody help me? I know that there are many of example, but it's doesn't work for my appl or i don't know how to use it in my example...

This is my LocationAdapter class:

public class LocationAdapter extends ArrayAdapter<LocationModel> {

int resource;
String response;
Context context;
private LayoutInflater mInflater;

public LocationAdapter(Context context, int resource, List<LocationModel> objects) {
    super(context, resource, objects);
    this.resource = resource;
    mInflater = LayoutInflater.from(context);
}

static class ViewHolder {
    TextView titleGameName;
    TextView distanceGame;
        }


public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;
    //Get the current location object
    LocationModel lm = (LocationModel) getItem(position);

    //Inflate the view
    if(convertView==null)
    {
        convertView = mInflater.inflate(R.layout.item, null);
        holder = new ViewHolder();
        holder.titleGameName = (TextView) convertView
                .findViewById(R.id.it_location_title);
        holder.distanceGame = (TextView) convertView
                .findViewById(R.id.it_location_distance);

        convertView.setTag(holder);   


     } else  {

         holder = (ViewHolder) convertView.getTag();

    }

    holder.titleGameName.setText(lm.getGameName());
    holder.distanceGame.setText(lm.getGameDistance()+" km");

    return convertView;
}

}

This is my mainListView class:

public class SelectGameActivity extends Activity {
LocationManager lm;
GeoPoint userLocation;

ArrayList<LocationModel> locationArray = null;
LocationAdapter locationAdapter;
LocationList list;

ListView lv;
TextView loadingText;
TextView sprawdz;

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

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

    locationArray = new ArrayList<LocationModel>();
    locationAdapter = new LocationAdapter(SelectGameActivity.this, R.layout.item, locationArray);


    lv.setTextFilterEnabled(true);
    lv.setAdapter(locationAdapter);
    lv.setItemsCanFocus(true);





    String serverName = getResources().getString(R.string.serverAdress);
    ApplicationController AC = (ApplicationController)getApplicationContext();
    String idPlayer = AC.getIdPlayer();
    int latitude = AC.getCurrentPositionLat();
    int longitude = AC.getCurrentPositionLon();
    int maxDistance = 99999999;


    try {
        new LocationSync().execute("myserverName");
    } catch(Exception e) {}







}


//this is connection with json
private class LocationSync extends AsyncTask<String, Integer, LocationList> {

    protected LocationList doInBackground(String... urls) {
        LocationList 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, LocationList.class);

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

    protected void onProgressUpdate(Integer... progress) {

    }

    protected void onPostExecute(LocationList loclist) {

        for(LocationModel lm : loclist.getLocations())
        {
            locationArray.add(lm);
        }
        locationAdapter.notifyDataSetChanged();
    }

}

EDIT:: I have second problem... i want to get id from item (items are downloading from json url) This is my list:

enter image description here

I want to get for example: ID:159 for first item and send it to nextActivity.

I have also the controllerClass.java where i'm setting and getting selectedIdGame:

    public String getIdGameSelected() {

    return idGame;
}

public void setIdGameSelected(String idGame) {

    this.idGame = idGame;
}

Is it good idea? Thanks for help.

Ok, it's done. i used:

   public void onItemClick(AdapterView<?> a, View
                                v, int position, long id) {


            String idGame = (String) ((TextView) v.findViewById(R.id.idGameSelected)).getText();

Thanks, Michal.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流绪微梦 2024-12-04 15:35:58

您可以在适配器实例上定义 onItemClick (即在 mainListView.java 中,紧接在 lv.setAdapter 之后):

lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> a, View
                                        v, int position, long id) {
                    Intent i = new Intent(v.getContext(), NextActivity.class);
                    startActivity(i);
                }
            });

You could define an onItemClick on your adapter instance (i.e. in mainListView.java, just after lv.setAdapter):

lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> a, View
                                        v, int position, long id) {
                    Intent i = new Intent(v.getContext(), NextActivity.class);
                    startActivity(i);
                }
            });
故事还在继续 2024-12-04 15:35:58
    lv.setOnItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            Intent i = new Intent(view.getContext(), NextActivity.class);
            startActivity(i);

        }
    });

我不知道为什么这不起作用,将其放在 try{}catch{} 块之后。

    lv.setOnItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            Intent i = new Intent(view.getContext(), NextActivity.class);
            startActivity(i);

        }
    });

I don't know why this wouldn't work, put it after the try{}catch{} block.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文