2017-04-25 89 views
0

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

你能后整个布局? – azizbekian

+0

我想你是缺少这行'LinearLayout myLyout =(LinearLayout)视图。 findViewById(R.id.my_layout); ' –

+0

您正在测试的API是什么?最低的API目标是什么? – fillobotto

回答

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

      } 
     }); 
    } 
+0

@ MagdHo0506如果答案真的有帮助,你应该接受答案 – Keerthivasan

2

查找解决方法:

以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"); 

      } 
     }); 
+1

你是如何得出结论他没有这样做的? – azizbekian

+0

没有帮助:( – MagdHo0506

+0

张贴您的代码xml和片段 – Rajasekhar

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

一旦你使用绑定您需要在OnCreateView打电话宣称它:ButterKnife.bind(this, view)如果它是一个片段或在您的OnCreate()如果它是一个ActivityButterKnife.bind(this)

但是当你正在使用有一个更容易绑定可用于点击事件。

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

有了这个方法,你仍然需要取决于它是否是一个FragmentActivityButterKnife.bind(this)ButterKnife.bind(this, view)打电话。

+0

仍然不工作:( – MagdHo0506

+0

你调用'ButterKnife.bind()'的顺序很重要。其他人都说过,你可能想要粘贴你完整的'onCreateView()'代码。 –

1

对于ButterKnife你可以做这样的:

@OnClick(R.id.some_layout) 
public void someClick(View view) { 
    // do something 
}