在我的主要活动中,我显示ListView
,它使用自定义BaseAdapter
(ThoughtListAdapter)。
listView = (ListView) findViewById(R.id.list);
adapter = new ThoughtListAdapter(this, resultingThoughts);
listView.setAdapter(adapter);
ListView
中的每个项目都有一个自定义布局,其中包含TextView
和两个Button
。
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.list_item_thought, null);
}
thoughtText = (TextView) convertView.findViewById(R.id.thought_text_view);
likeButton = (Button) convertView.findViewById(R.id.thought_like_button);
dislikeButton = (Button) convertView.findViewById(R.id.thought_dislike_button);
单击Button
时,会调用AsyncTask
(AsyncPost)连接到我的数据库并进行一些更改。
likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("LIKE CLICKED");
Thought t = thoughtItems.get(position);
thoughtId = t.getId();
opinion = 1;
AsyncPost asyncPost = new AsyncPost(activity,ThoughtListAdapter.this);
asyncPost.execute(SHARE_THOUGHT_URL,
TAG_PERSON_EMAIL, "m@b.it",
TAG_THOUGHT_ID, thoughtId.toString(),
TAG_OPINION, opinion.toString());
}
});
我需要的是在Button
完成成功后,使列表项的两个AsyncTask
- s消失。我有一个方法onComplete(JSONObject json)
,它详细说明了JSONObject
返回的AsyncTask
。我尝试在onComplete
方法中使按钮不可见,但这不起作用,因为onComplete()
不知道单击了哪个确切的按钮。
如何在onComplete()
内传递完全点击按钮的实例,并仅消除相关列表项的“喜欢”和“不喜欢”按钮?
AsyncPost
是我所有其他活动使用的全局AsyncTask
。我强烈希望不管它。 onComplete()
方法用作onPostExecute()
的{{1}}方法。
以下是我AsyncTask
中的getView()
和onComplete()
方法,其中包含上面显示的所有代码。
谢谢。
BaseAdapter
答案 0 :(得分:0)
对此的一个解决方案是在Thought
对象上添加一些内容,以指示是否显示按钮。
因此,在getView()
方法中,您可以查看
likeButton = (Button) convertView.findViewById(R.id.thought_like_button);
dislikeButton = (Button) convertView.findViewById(R.id.thought_dislike_button);
Thought t = thoughtItems.get(position);
if (t.hideButtons()) {
likeButton.setVisibility(View.GONE);
dislikeButton.setVisibility(View.GONE);
}
else {
likeButton.setVisibility(View.VISIBLE);
dislikeButton.setVisibility(View.VISIBLE);
}
然后,您需要让onComplete
方法返回与其相关的id
对象的Thought
。然后在你的onComplete
内进行
int id = //get your id from your JSON response
for(Thought t : thoughtItems) {
if (t.getId() == id) {
t.setHideButtons(true);
notifyDataSetChanged();
break;
}
}
通过调用notifyDataSetChanged()
,它会重新绘制您的列表,当它检查是否应该显示按钮时,它不会显示它们,因为它是在该思想项上设置的