如何将onClickListener添加到CardLayout中的按钮

时间:2014-10-07 17:59:51

标签: android android-layout cardlayout cardslib

我正在使用Gabrielemariotti的Cardslib库在我的Android应用程序中实现卡片布局。我正在为我的卡片使用自定义布局。以下是创建自定义卡片的代码:

Card card = new Card(getActivity().getApplicationContext(), R.layout.status_card);
card.setTitle("sample title");

我的卡底部有三个按钮(如Facebook安卓应用中的按钮)。我想为这些按钮设置onClickListener。但我不知道该怎么做。

请在这里帮助我。

谢谢,

2 个答案:

答案 0 :(得分:1)

您必须定义布局。 然后使用此布局创建Card,并覆盖setupInnerViewElements方法。 在此方法中,您可以在按钮上定义OnClickListener,并且可以访问所有卡的值。

 public class CustomCard extends Card {

        /**
         * Constructor with a custom inner layout
         *
         * @param context
         */
        public CustomCard(Context context) {
            super(context, R.layout.carddemo_mycard_inner_content);
        }


        @Override
        public void setupInnerViewElements(ViewGroup parent, View view) {

            //Retrieve button 
            Button myButton = (Button) view.findViewById(R.id.myButton);
            if (myButton != null) {
                myButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getContext(), "Click Listener card=" + getId(), 
                              Toast.LENGTH_LONG).show();
                    }
                });
            }
        }
    }

答案 1 :(得分:0)

我有一个简单的解决方案。

因此,添加onClick侦听器的另一种方法是通过XML,这更容易一些。

在按钮的xml中,添加以下行:

android:onClick="methodName"

其中'methodName'显然是方法的名称。只要单击按钮,这将调用该方法。下一步是显而易见的 - 只需进入您的java活动并创建您想要调用的方法,确保将View作为参数。所以你的活动课中会有这样的东西:

public void methodName(View view) {
    Log.v("appTag","BUTTON WAS PRESSED");
    //whatever you want to do here
}

这是创建整个onClickListener的快捷方式。

希望有所帮助。祝你好运:)

编辑:

请记住,你在这里传递了一个视图,所以你可以从那个视图中获得你想要的任何东西。既然你评论说你需要从你的卡片中取出文本,我会告诉你如何做到这一点。

以下是此案例的方法:

public void methodName(View view) {
    Log.v("appTag","BUTTON WAS PRESSED");
    TextView textFromCard = view.findViewById(R.id.THE_ID_YOU_GAVE_YOUR_TEXTVIEW_IN_THE_XML);
    String textFromTextView = textFromCard.getText().toString();
    //do whatever you want with the string here
}