我可以使用fabric sdk在我的时间轴上设置自定义onClick吗?

时间:2015-04-29 03:34:48

标签: twitter android-listview onclick android-adapter twitter-fabric

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

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,但在这种情况下,我无法想到要覆盖的任何想法。

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

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:5)

最后,我使用自定义适配器(非常类似于您在问题中使用的适配器)使其工作。此适配器从超级实现获取结果视图,并添加onClickListener以覆盖结构默认值:

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

}

完整代码示例here

希望它有所帮助。