在fragment中处理android:onClick事件,而不是在fragmentActivity中?

时间:2014-03-26 09:15:47

标签: android android-fragments onclick android-fragmentactivity listviewitem

我在Fragment中有一个列表视图。

在我的listitem布局中包含三个按钮,例如:

<LinearLayout
android:id="@+id/back"
android:layout_width="match_parent"
android:layout_height="@dimen/msg_item_h">

<Button
    android:layout_width="@dimen/msg_delete_btn_w"
    android:layout_height="@dimen/msg_delete_btn_w"
    android:id="@+id/btnDelete"
    android:onClikc="onDeleteClick"
    android:text="delete" />

<Button
    android:layout_width="@dimen/msg_delete_btn_w"
    android:layout_height="@dimen/msg_delete_btn_w"
    android:id="@+id/btnAdd"
    android:onClikc="onAddClick"
    android:text="add" />

<Button
    android:layout_width="@dimen/msg_delete_btn_w"
    android:layout_height="@dimen/msg_delete_btn_w"
    android:id="@+id/btnEdit"
    android:onClikc="onEditClick"
    android:text="edit" />

我想在我的片段中处理事件onDeleteClick,onEditClick和onAddClick。 但每次fragmentActivity都得到了这个事件。

有没有办法解决它?

3 个答案:

答案 0 :(得分:0)

您可以在片段中执行以下操作:

view.findViewById(R.id.btnDelete).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(final View v) {
                //Do your stuff here
            }
        });

如果你这样做,你将不再需要android:onClick="onDeleteClick"

答案 1 :(得分:0)

以下解决方案处理onClick事件,适用于Activity和Fragments:

public class YourFragmentClass extends Fragment implements OnClickListener{

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

    View view = inflater.inflate(R.layout.fragment_xml_file, container, false);

    Button delete = (Button) view.findViewById(R.id.btnDelete);
    delete.setOnClickListener(this);

    return view;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btnDelete:
            // Do something here...
           break;
    }
  }
}

答案 2 :(得分:0)

android:onClick将事件传递给Context,因此这是不可能的。

根据View文档:

  

单击视图时要调用的此View上下文中的方法的名称。此名称必须对应于只接受View类型的一个参数的公共方法。例如,如果指定android:onClick =“sayHello”,则必须声明上下文的公共void sayHello(View v)方法(通常是您的Activity)。