Can I customize onClick on my timeline using the sdk tag?

I am creating a Twitter client using Fabric, but I cannot create a custom onClick. I created this custom adapter and tried to create OnClickListener, but it did not work. Always open a tweet in your browser.

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

In the BaseTweetView class, this is the type of the OnClickListener function, but in this case I cannot come up with any idea to rewrite.

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

Any ideas? Thanks

+6
source share
1 answer

Finally, I did this using a special adapter (very similar to the one you are using in the question). This adapter gets the resulting view from the super implementation and adds onClickListener to override the default value:

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

Full code example here .

Hope this helps.

+5
source

Source: https://habr.com/ru/post/986197/


All Articles