6

Fabric'i kullanarak bir Twitter istemcisi oluşturuyorum ancak özel bir onClick oluşturamıyorum. Bu özel bağdaştırıcıyı oluşturdum ve bir OnClickListener oluşturmaya çalıştım ancak çalışmıyor. Her zaman tarayıcıda tweet açın. BaseTweetView sınıftaKumaş sdk'yi kullanarak zaman çizelgemde özel tıklayabilir miyim?

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

bu durumda ben üzerine yazmak için herhangi bir fikir düşünemiyorum OnClickListener ancak fonksiyon türüdür.

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

Herhangi bir fikir? Teşekkürler

cevap

5

Son olarak, bu işi özel bir Bağdaştırıcı kullanarak yaptım (sorunda kullandığınıza çok benzer). Bu adaptör, süper uygulanmasından elde edilen bir görünümü elde etmekte ve kumaş varsayılan bir geçersiz kılan bir OnClickListener ekler:

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

} 

tam kod örneği here.

Yardım edin.

+0

Yöntemi değiştirmek için gerekli tüm tıklamaları devre dışı bırakmak için: 'private void disableViewAndSubViews (ViewGroup düzeni) { layout.setEnabled (false); (int i = 0; i pablogupi

+0

Ben örnek örneği güncelleştirin ve öneriniz ile cevap;) – sabadow

+0

TweetTimeLineListAdapter uzatmadan bu iş nasıl yapılacağı hakkında herhangi bir fikir? Yukarıdaki kodu denedim ama benim için çalışmıyor. Bir Tweet nesnesi oluşturup listenin satırı olan bir FrameLayout'a ekliyorum. Varsayılan tweet eylemlerini çağırmadan birini seçmem gerekiyor. – SavageKing

İlgili konular