2016-02-21 97 views
4

处理的onClick这是我第一次尝试的片段,我不能够处理的android:的onClick如何在碎片

我有这样

<Button 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/save_keywords_button" 
     android:id="@+id/save_keywords" 
     android:layout_marginTop="340dp" 
     android:background="#FF2E7D32" 
     android:textColor="#FFFFFF" 
     android:typeface="normal" 
     android:onClick="myLogic" /> 

我搜索我的片段XML里面的按钮许多结果,并且无法获得处理onClick事件的确切解决方案。

我的问题是,我怎样才能得到我的按钮的ID和编写myLogic方法。 FindViewById()不能在分段中工作,我应该在哪里编写该方法? 在片段或我的活动?

+1

看来你没有谷歌它,你呢?检查此[链接](http://www.vogella.com/tutorials/AndroidFragments/article.html) – Amt87

+1

访问此链接https://developer.android.com/tools/data-binding/guide.html#binding_events – USKMobility

回答

7

更好的办法是在你的片段来实现OnClickListener到您的片段类和压倒一切的onCreateView在您指定监听到你的按钮。

通过将onClick属性放入您的XML布局中,您的加载活动将查找活动中的元素,而不是片段中的元素。这会抛出异常。

我建议阅读一些片段活动层次结构,以了解何时可以访问片段中的元素。 here

1

尝试添加方法

public void myLogic(View v) 
+0

在我的mainActivity中添加它,并在按下按钮时遇到此错误 在父代或祖代中找不到方法myLogic(View)android:onClick属性定义在视图类android.support.v7.widget.AppCompatButton上的id为' save_keywords' – Uday

1

如果你需要得到视图fragmen你可以做到这一点getView().findViewById(R.id.foo);onCreateView()被称为后,才:从

public class StartFragment extends Fragment implements OnClickListener{ 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.fragment_start, container, false); 

    Button b = (Button) v.findViewById(R.id.save_keywords); 
    b.setOnClickListener(this); 
    return v; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.save_keywords: 

     ... 

     break; 
    } 
} 
} 

参考。如果您在xml中指定onClick,则无需在程序中编写任何链接到该方法,只需在您的活动中实施该方法即可。

+0

正如您所说,我在主Activity中编写了一个方法“public void myLogic(View v)”,但当单击按钮时出现此错误 java.lang.IllegalStateException:找不到方法myLogic(View)in一个父或祖先上下文的android:onClick属性定义在视图类android.support.v7.widget.AppCompatButton id为'save_keywords' – Uday

+0

@Uday我们将需要您的片段和活动的代码来查看错误。手动设置onclick监听器是个好主意。如果你将在代码中拼错你的方法名称,它将不会被调用。 – callOfCode