2016-04-20 1 views
0

Я хочу сделать daimajia slidetlayout кликабельным. Я установил OnClickListener на SliderLayout, но он не работает. Я также устанавливаю clickable true в xml, но все еще не работает.Могу ли я сделать com.daimajia.slider.library.SliderLayout clickable во фрагменте

вот мой код: -

<RelativeLayout 
    android:id="@+id/relative_slider" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:addStatesFromChildren="true" 
    android:clickable="true" 
    android:duplicateParentState="true" 
    android:focusable="true"> 

    <com.daimajia.slider.library.SliderLayout 
     android:id="@+id/slider" 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     custom:indicator_visibility="visible" /> 

</RelativeLayout> 

Мой фрагмент: -

mDemoSlider = (SliderLayout)rootView.findViewById(R.id.slider); 
mDemoSlider.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(getContext(),"click",Toast.LENGTH_LONG).show(); 
     int pos = mDemoSlider.getCurrentPosition(); 
     int id = image_link.get(pos); 
     if(id!=0){ 
      Intent intent = new Intent(getContext(),ProductsCategory.class); 
      intent.putExtra("category",id+""); 
      startActivity(intent); 
     } 
    } 
}); 

ответ

3

com.daimajia.slider.library уже имеет, что встроенный в случае. Это будет доступно только при добавлении имен слайдеров. Вы должны добавить имена для каждого слайдера, как это.

HashMap<String,String> url_maps = new HashMap<String, String>(); 
     url_maps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg"); 
     url_maps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png"); 
     url_maps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg"); 
     url_maps.put("Game of Thrones", "http://images.boomsbeat.com/data/images/full/19640/game-of-thrones-season-4-jpg.jpg"); 

     for (String name : url_maps.keySet()) { 
      TextSliderView textSliderView = new TextSliderView(getContext()); 
      // initialize a SliderLayout 
      textSliderView 
        .description(name) 
        .image(url_maps.get(name)) 
        .setScaleType(BaseSliderView.ScaleType.Fit) 
        .setOnSliderClickListener(this); 

      //add your extra information 
      textSliderView.bundle(new Bundle()); 
      textSliderView.getBundle() 
        .putString("extra", name); 

      mDemoSlider.addSlider(textSliderView); 
     } 

на представлении текста слайдера

textSliderView.setOnSliderClickListener(this); 

и реализации BaseSliderView.OnSliderClickListener.then мы можем переопределить ниже код

@Override 
    public void onSliderClick(BaseSliderView slider) { 
//do something 
    } 
+0

Вы должны ** реализовать BaseSliderView.OnSliderClickListener ** на вашем фрагменте, а затем вы можете переопределить onSliderClick, этот ответ является правильным. –

+0

@ Damián González Fernández Я забыл добавить это спасибо. –

1

Просто, чтобы добавить к ответу. Стоит отметить, что по методу:

@Override 
    public void onSliderClick(BaseSliderView slider) { 
     //do something 
} 

BaseSliderView, полученные этим способом вызова не может быть текущий слайдер вы нажимали. Вы должны явно вызвать метод getCurrentSlider(), чтобы получить ранее прикрепленные пакеты. Например:

@Override 
    public void onSliderClick(BaseSliderView slider) { 
     BaseSliderView clickedSlide = sliderLayout.getCurrentSlider(); 
     //get bundles attached and or do something else 
} 
Смежные вопросы