我可以使用 Fabric sdk 在我的时间线上设置自定义 onClick 吗? [英] Can I set custom onClick on my timeline using fabric sdk?

查看:29
本文介绍了我可以使用 Fabric sdk 在我的时间线上设置自定义 onClick 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Fabric 创建 Twitter 客户端,但无法创建自定义 onClick.我创建了这个自定义适配器并尝试创建一个 OnClickListener 但没有工作.始终在浏览器中打开推文.

I am creating a Twitter client using Fabric but I can not create a custom onClick. I created this custom adapter and tried to create a OnClickListener but not working. Always open in browser tweet.

public class TweetAdapter extends TweetTimelineListAdapter {

    public ArrayList<Long> tweetIds=new ArrayList<Long>();
    public TweetAdapter(Context context, Timeline<Tweet> timeline) {
        super(context, timeline);
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Object rowView = convertView;
        final Tweet tweet = (Tweet)this.getItem(position);
        if(convertView == null) {
            rowView = new CompactTweetView(this.context, tweet);
        } else {
            ((BaseTweetView)convertView).setTweet(tweet);
            ((View)rowView).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    tweetIds.add(tweet.getId());
                }
            });
        }
        return (View)rowView;
    }
}

在 BaseTweetView 类中,它是函数类型 OnClickListener 但在这种情况下,我想不出任何覆盖的想法.

In BaseTweetView class it is the function type OnClickListener but in this case I can't think of any idea to overwrite.

private void setPermalinkLauncher() {
    BaseTweetView.PermalinkClickListener listener = new BaseTweetView.PermalinkClickListener();
    this.setOnClickListener(listener);
    this.contentView.setOnClickListener(listener);
}

class PermalinkClickListener implements OnClickListener {
    PermalinkClickListener() {
    }

    public void onClick(View v) {
        if(BaseTweetView.this.getPermalinkUri() != null) {
            BaseTweetView.this.scribePermalinkClick();
            BaseTweetView.this.launchPermalink();
        }
    }
}

有什么想法吗?谢谢

推荐答案

最后,我使用自定义适配器(与您在问题中使用的适配器非常相似)完成了这项工作.此适配器从超级实现中获取结果视图并添加一个 onClickListener 以覆盖结构默认值:

Finally I made this works using a custom Adapter (very similar that the one you use in the question). This adapter obtains the resulting view from super implementation and adds an onClickListener to overrides the fabric defaults one:

class CustomTweetTimelineListAdapter extends TweetTimelineListAdapter {

    public CustomTweetTimelineListAdapter(Context context, Timeline<Tweet> timeline) {
        super(context, timeline);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);

        //disable subviews to avoid links are clickable
        if(view instanceof ViewGroup){
            disableViewAndSubViews((ViewGroup) view);
        }

        //enable root view and attach custom listener
        view.setEnabled(true);            
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tweetId = "click tweetId:"+getItemId(position);
                Toast.makeText(context, tweetId, Toast.LENGTH_SHORT).show();
            }
        });
        return view;
    }

    //helper method to disable subviews
    private void disableViewAndSubViews(ViewGroup layout) { 
        layout.setEnabled(false); 
        for (int i = 0; i < layout.getChildCount(); i++) { 
            View child = layout.getChildAt(i); 
            if (child instanceof ViewGroup) { 
                disableViewAndSubViews((ViewGroup) child); 
            } else { 
                child.setEnabled(false); 
                child.setClickable(false); 
                child.setLongClickable(false); 
            } 
        } 
    }

}

完整代码示例此处.

希望有帮助.

这篇关于我可以使用 Fabric sdk 在我的时间线上设置自定义 onClick 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆