线性布局点击无效

时间:2017-04-25 09:15:34

标签: android

我有一个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));
    }
});

它不起作用。我甚至都看不到日志消息。这有什么问题?

5 个答案:

答案 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
}