如何获得行在列表视图中的位置?

问题描述 投票:0回答:1

任何人都可以帮助我,如何在单击时从列表视图存储行的值位置?我想在另一个类的onPostExecute中使用该值。谢谢您的时间。这是我的代码。

 @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = LayoutInflater.from(c).inflate(R.layout.model, viewGroup, false);
        }
       ...
        final Pending s = (Pending) this.getItem(i);
       ...

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

*//here is where I want to get the position to use on my updateData()'s onPostExecute*

                final String id = 2;
                String link = "http://abcabcabc.com/abc.php?id=" + id;
                new updateData().execute(link);
            }
        });
        return view;
    }

而且,如何在onPostExecute中调用它以显示一些数据?

android android-listview
1个回答
0
投票

行的位置是您的i方法中的参数getView

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
    //i is the position of the row
}

为了在onPostExecuteAsyncTask方法中使用行的位置,您需要将行作为参数传递给“ updateData”类。

但是,问题是AsyncTask只能接受一种类型的数据作为参数,并且目前它只能接受字符串。

为了解决这个问题,并且能够同时传递URL(字符串)和id(int),您可以创建一个类(其名称更好,代表您对链接的操作):

public class DetailLink {
    private String link;
    private int id;

   //getters and setters
}

然后,在您的“ updateData”类中,将Params类型参数更改为DetailLink类型而不是String。这意味着您的doInBackground方法将接受DetailLink作为参数。为了存储id以便可以使用onPostExecute方法,请将其另存为“ updateData”类的实例变量。

 private class UpdateDataTask extends AsyncTask<DetailLink, Void, Void> {
     private int myId;

     protected void doInBackground(DetailLink... detailLink) {
         myId = detailLink.getId();
         String url = detailLink.getLink();
         //do your task here
     }

     protected void onPostExecute() {
         //do something with the myId instance variable
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.