我被要求重构下面显示的getView()代码。
我有带有自定义适配器的ListView。每一行都包含可点击的按钮和文本。
目前onclicklisteners设置在getView()的主体中,这是一个非常疯狂的想法,因为这个方法被频繁调用。在每个onclick函数中,我需要访问私有数据来调用bundle中的新活动。
如何将onclick定义移到getview()例程之外?
当调用onclick时,我需要有关list元素位置的信息(以访问私有数据)以及单击了哪个视图(以启动正确的活动)。

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;
}

最佳答案

您的活动必须实现onclicklistener,并将实现的方法移动到活动级别。
基于方法的view参数,您可以检测事件来自哪个ui对象(button,textview)。
至于如何检测ListView中的哪个记录/行。必须在tag方法中的按钮和文本视图上设置自定义getView,以便在事件中通过getTag读取。如果字符串不够,则此标记也可以是自定义对象。可能/推荐的方法是在适配器中的位置。

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

10-12 04:10