ANDROID - OnClick()按钮引用问题?

时间:2013-06-19 18:30:47

标签: android button onclick

我想让OnClick()方法中的按钮启动一个新活动,但它不会做任何事情。我认为这是因为需要膨胀的视图是LinearLayout LoginLayout,但我不知道如何引用它。如果按照在注释块中定义的方式定义按钮,该按钮可以正常工作。

public class LoginActivity extends Fragment implements OnClickListener {

/*
 * (non-Javadoc)
 * 
 * @see
 * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
 * android.view.ViewGroup, android.os.Bundle)
 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    if (container == null) {

        return null;
    }

    LinearLayout LoginLayout = (LinearLayout) inflater.inflate(
            R.layout.activity_login, container, false);

    /*
     * Button btnLogin = (Button) LoginLayout.findViewById(R.id.btn_Login);
     * btnLogin.setOnClickListener(new View.OnClickListener() {
     * 
     * @Override public void onClick(View v) {
     * 
     * Intent intent = new Intent(v.getContext(), Blankactivity.class);
     * v.getContext().startActivity(intent);
     * 
     * 
     * } });
     */

    return LoginLayout;
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.btn_Login) {

        Intent intent = new Intent(v.getContext(), Blankactivity.class);
        v.getContext().startActivity(intent);
        startActivity(intent);

    }

}

}

2 个答案:

答案 0 :(得分:1)

删除implements OnClickListener,因为您使用的是匿名内部类

public class LoginActivity extends Fragment {
   ...
 }

同时删除以下

@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_Login) {

    Intent intent = new Intent(v.getContext(), Blankactivity.class);
    v.getContext().startActivity(intent);
    startActivity(intent);

}

您应该使用活动上下文而不是v.getContext()。

http://developer.android.com/reference/android/app/Fragment.html#getActivity%28%29

使用getActivity()获取活动上下文。

   Button btnLogin = (Button) LoginLayout.findViewById(R.id.btn_Login);
   btnLogin.setOnClickListener(new View.OnClickListener() {
   @Override 
   public void onClick(View v) {
   Intent intent = new Intent(getActivity(), Blankactivity.class);
   startActivity(intent);
   } 
   });

答案 1 :(得分:0)

我假设您使用android:onclick来处理布局中的click事件?

如果是,那么如果您在活动中,则不需要使用implements OnClickListener。

如果您使用android:onclick =“login”,则调用public void login(View v)方法。

如果你试图在像这样的片段中使用它我的经验是android:onClick不起作用。

在那种情况下,做Raghunandan所说的。

Button btnLogin = (Button) LoginLayout.findViewById(R.id.btn_Login);
btnLogin.setOnClickListener(this);

如果使用实现onClickListener

,则使用该按钮