我有一个LinearLayout
,当我点击它时我想点击它的效果。这是我在XML中的LinearLayout
。
<LinearLayout
android:id="@+id/my_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="vertical"
android:background="@drawable/ripple_effect">
在我的onCreateView()
片段中,我有:
myLyout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("hi","Click1");
myLyout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.ripple_effect));
}
});
它不起作用。我甚至都看不到日志消息。这有什么问题?
答案 0 :(得分:4)
只要尝试使用onViewCreated,一旦视图在屏幕中完全呈现,之后就可以绑定事件和数据了。这是好的做法
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
LinearLayout myLayt = (LinearLayout) view.findViewById(R.id.my_layout);
myLayt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("hi","Click1");
}
});
}
答案 1 :(得分:3)
view.findViewById(R.id.my_layout).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("hi","Click1");
myLyout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.ripple_effect));
}
});
答案 2 :(得分:2)
找到解决方案:
IN Xml
<LinearLayout
android:id="@+id/my_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/ripple_effect">
活动
LinearLayout myLayt = (LinearLayout) view.findViewById(R.id.my_layout);
myLayt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("hi","Click1");
}
});
答案 3 :(得分:1)
一旦你用绑定声明它,你需要打电话给你的hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
timeoutInMilliseconds: 60000
:OnCreateView
如果它是片段,或者在ButterKnife.bind(this, view)
中如果它是#&}是OnCreate()
:Activity
但是,当您使用ButterKnife.bind(this)
时,点击事件可以更轻松地进行绑定。
ButterKnife
使用此方法,您仍然需要致电@BindView(R.id.my_layout) LinearLayout myLyout; // You still need to bind this up here as you call it in your onClick method
...
@OnClick(R.id.my_layout)
public void onMyLayoutClicked()
{
Log.d("hi","Click1");
myLyout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.ripple_effect));
}
或ButterKnife.bind(this)
,具体取决于它是ButterKnife.bind(this, view)
还是Fragment
。
答案 4 :(得分:1)
对于ButterKnife,你可以这样做:
@OnClick(R.id.some_layout)
public void someClick(View view) {
// do something
}