gpt4 book ai didi

android - 如何避免在 getView() 中设置内联 onClickListener

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:01 25 4
gpt4 key购买 nike

我有带有自定义适配器的 ListView。每行都包含可点击的按钮和文本。

目前 onClickListeners 设置在 getView() 的主体中,这是一个非常疯狂的想法,因为这个方法被非常频繁地调用。在每个 onClick 函数中,我需要访问私有(private)数据以使用 bundle 调用新 Activity 。

如何将 onClick 定义移到 getView() 例程之外?

当调用 onClick 时,我需要有关列表元素位置的信息(以访问私有(private)数据)以及单击哪个 View (以启动正确的 Activity)。

public View getView(int position, View convertView, ViewGroup parent) {
if(convertview == null) {
convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.photo_tweet_row, null);
}

TextView userTweet = (TextView) v.findViewById(R.id.feed_user_tweet_body);
RepliesButton repliesBtn = (RepliesButton) v.findViewById(R.id.feed_replies_button);

Status twitterDataItem = getItem(position);

if (twitterDataItem != null) {

if (userTweet != null) {
userTweet.setText(twitterDataItem.getText());
}
if (repliesBtn != null) {
repliesBtn.setText(" replies");
}

userTweet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getContext(), ProfileActivity.class);
intent.putExtra(getContext().getString(R.string.serializable_user), twitterDataItem.getUser());
getContext().startActivity(intent);
}
});

repliesBtn.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {
if (!twitterDataItem.getComments().contentEquals("0")) {
Intent myIntent = new Intent(getContext(), RepliesToFeedActivity.class);
myIntent.putExtra("photoTweet", twitterDataItem);
getContext().startActivity(myIntent);
}
}
});
}
return convertView;
}

最佳答案

您的 Activity 必须实现 OnClickListener,并将实现的方法向上移动到 Activity 级别。

根据方法的 view 参数,您可以检测事件来自哪个 UI 对象(按钮、 TextView )。

至于如何检测 ListView 中的记录/行。您必须在 getView 方法中的按钮和 TextView 上设置自定义 tag,您将通过 getTag 在事件中读取该标签可以如果字符串不够,也可以是自定义对象。可能/推荐的方式是在适配器中的位置。

关于android - 如何避免在 getView() 中设置内联 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com