首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取ListItem Id

获取ListItem Id
EN

Stack Overflow用户
提问于 2015-07-02 19:02:38
回答 2查看 112关注 0票数 0

我有一个自定义的ListView,其中显示了从服务器上下载的jsonArray中的元素。现在我希望用户能够“喜欢”条目。因此,当他点击一个ListItem时,服务器的数据库就会更新,因此点赞的数量就会增加。为了避免这种情况,我在SQLite数据库中使用ListItem的位置存储了一行数据。这可以很好地工作,直到服务器数据库中有新的条目,并且位置发生变化。我该如何解决这个问题?有没有可能从ListItem而不是positon或其他什么地方获取id?下面是我的代码:

代码语言:javascript
复制
getALlEntrysListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Cursor cursor = getLikes(dbh);
                cursor.moveToFirst();
                if (cursor.moveToFirst()) {
                    do {
                  /*check if Item is liked (=1) or not (=0)*/
                        if (Integer.parseInt(cursor.getString(2)) == 1) {
                            dbh.updateLike(dbh, position, Integer.parseInt(cursor.getString(2)), 0);
                            dislike(position);
                            cursor.close();
                        } else if (Integer.parseInt(cursor.getString(2)) == 0) {
                            dbh.updateLike(dbh, position, Integer.parseInt(cursor.getString(2)), 1);
                            likeUpload(position);
                            cursor.close();
                        } else {
                            dbh.addLike(dbh, position, 1);
                            likeUpload(position);
                            cursor.close();
                        }
                    } while (cursor.moveToNext());
                }

/*increase numer of likes on the Server Database (the dislike method works the same way):*/
public void likeUpload (int position){
    try {

        JSONObject entryClicked = jsonArray.getJSONObject(position);
        entryID = entryClicked.getString("id");

        final List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("id", entryID));

        new AsyncTask<ApiConnector, Long, Boolean>() {
            @Override
            protected Boolean doInBackground(ApiConnector... apiConnectors) {
                return apiConnectors[0].like(params);

            }
        }.execute(new ApiConnector());

        finish();
        startActivity(getIntent());
EN

回答 2

Stack Overflow用户

发布于 2015-07-02 19:41:29

列表没有自己的id,默认为position。底层的项必须具有唯一的id,当您有了唯一的Id时,您可以重写getItemId方法来返回该Id。

代码语言:javascript
复制
 public class YourListAdapter extends ArrayAdapter<CustomPojo> {

 ....
 @Override
        public long getItemId(int position) {
            if(listOfData!=null) {
                return Long.valueOf(listOfData.get(position).getId());
            }
            return -1;
        }
.....

}
票数 0
EN

Stack Overflow用户

发布于 2015-07-02 20:20:28

尝试这种方式可能会对你有所帮助

代码语言:javascript
复制
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
        long id) {
    // TODO Auto-generated method stub

    switch (adapter.getId()) {
    case R.id.listView:
            YourVOClass yourVOClass = (YourVOClass) listView
                    .getItemAtPosition(position);
                    }
                }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31182782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档