我希望能够在View.OnclickListener
的页面(片段)中设置ImageView
到ViewPager
,我不想点击整个页面我的ViewPager
,我只想点击一个规范ImageView
。我遵循了这些问题(onClick not triggered on LinearLayout with child,How to set OnClickListener in ViewPager
),但他们没有帮助我。这是我的实际代码:
MyPageFragment.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:focusableInTouchMode="true"
android:id="@+id/container_linear"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop" />
</LinearLayout>
</LinearLayout>
MyActivity.xml
<android.support.v4.view.ViewPager
android:id="@+id/product_view_pager"
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:gravity="center"
android:overScrollMode="never" />
MyFragment.class(我使用Butterknife绑定视图)
@BindView(R.id.container_linear)
LinearLayout mContainer;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View mRootView = inflater.inflate(R.layout.my_layout, container, false);
ButterKnife.bind(this, mRootView);
mContainer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Test", "Clicked!");
}
});
}
感谢您的支持。
答案 0 :(得分:0)
要考虑的一件事是将OnClickListener移动到您设置为可点击的父LinearLayout,看看是否有帮助。
另一件事是将android:focusableInTouchMode="true"
添加到您将OnClickListener附加到的视图中。
除此之外,您可能希望共享用于注册OnClickListener的代码,以便我们调查其他可能的错误。
答案 1 :(得分:0)
如果我理解正确,您想点击MyPageFragment.xml
内的图片视图。这很简单,但您需要ID
ImageView
,并在onCreateView
方法中引用它,就像使用LinearLayout
一样,然后在onClickListener
上使用clickable="false"
图像。
所以在最近的谈话中,似乎在线性布局中你需要删除行
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:duplicateParentState="true" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="240dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:focusableInTouchMode="true" android:id="@+id/container_linear" android:gravity="center" android:orientation="vertical"> <--you need to give ID to the view to be able to perform events on them specifically.--> <ImageView android:id="@+id/my_awesome_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="centerCrop" /> </LinearLayout>
基本上,它已阻止其子项的所有点击,因此线性布局以及imageview点击不适合您。看到这段代码我删除了那一行。希望这有效
请遵守此准则。
MyPageFragment.xml
@BindView(R.id.container_linear)
LinearLayout mContainer;
//declare with butterknife
@BindView(R.id.my_awesome_image)
ImageView myAwesomeImage;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View mRootView = inflater.inflate(R.layout.my_layout, container, false);
ButterKnife.bind(this, mRootView);
//you set click listener previously on entire linear layout instead of imageview
//that's why it was not reflecting on imageview click.
myAwesomeImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG , "Awesome Imageview clicked!");
}
});
}
现在在你的MyFragment.class
中HTTP/1.1 200 OK
Server: Payara Micro #badassfish
答案 2 :(得分:0)
我使用以下代码块解决了这个问题:
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
view.setOnClickListener(new OnClickListener(){
public void onClick(View v){
/* Do as you please here. */
}
});
}
此答案的参考资料可在此处查看:How to detect click on ImageView in ViewPager's PagerAdapter (android)?