6

Sto creando un client Twitter utilizzando Fabric ma non riesco a creare un onClick personalizzato. Ho creato questo adattatore personalizzato e ho provato a creare un OnClickListener ma non funzionante. Apri sempre nel tweet del browser.Posso impostare personalizzato onClick sulla mia timeline usando fabric sdk?

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 classe BaseTweetView E 'il tipo di funzione OnClickListener, ma in questo caso non mi viene in mente qualche idea per sovrascrivere.

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

Qualche idea? Grazie

risposta

5

Infine ho fatto questo funziona utilizzando un adattatore personalizzato (molto simile a quello che si utilizza nella domanda). Questo adattatore ottiene la vista risultante da super realizzazione e aggiunge un onClickListener per sovrascrive le impostazioni predefinite tessuto uno:

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

} 

codice completo esempio here.

Spero che aiuti.

+0

Per disabilitare tutti i clic necessari per modificare il metodo: 'vuoto privato disableViewAndSubViews (layout ViewGroup) { layout.setEnabled (false); per (int i = 0; i pablogupi

+0

Aggiorno il primo esempio e rispondo con il tuo suggerimento;) – sabadow

+0

qualche idea su come fare questo lavoro senza estendere TweetTimeLineListAdapter? Ho provato il codice sopra ma non funziona per me. Sto creando un oggetto Tweet e aggiungendolo in un FrameLayout, che è la riga della lista. Devo selezionarne uno senza invocare le azioni di tweet predefinite. – SavageKing