我在Android Studio中创建了带有导航抽屉活动的项目,我已成功创建它,在导航抽屉活动中我创建了3个部分,在第1部分中我放了Button,我想在该按钮上设置setOnClickListener方法,这将导致启动新活动(例如“xyz.class”)我使用过代码
startActivity(new Intent(this,xyz.class));
但是“this”关键字不起作用并且给我错误。 所以,我改变了代码,如
Context c;
startActivity(new Intent(c,xyz.class));
,它给出了NullPointerException,
我的第1部分代码是
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.example.pratik.crm50.R;
import com.gc.materialdesign.views.ButtonFloat;
public class Dashboard extends Fragment implements View.OnClickListener {
View rootView;
Context c;
private ButtonFloat float_btn;
private Button but;
private Button btn;
Context c;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View v;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
v = inflater.inflate(R.layout.dashboard_layout,container, false);
} else {
v = super.onCreateView(inflater,container, savedInstanceState);
}
View vv=v.findViewById(R.id.button_simple);
vv.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
// Toast.makeText(c,"Float Button",Toast.LENGTH_SHORT).show();
Log.e("ssas","sasafa");
//startActivity(new Intent(c,xyz.class));
}
}
我可以在上面的代码中成功登录Log.e("ssas","sasafa")
。
那怎么做呢?
答案 0 :(得分:1)
片段不会扩展Context
,而Intent
构造函数需要第一个参数。{/ p>
Context c
变量是多余的,因为默认情况下Fragment
会保存父活动。
您需要使用片段附加到的活动(扩展Context
的类):
startActivity(new Intent(getActivity(), xyz.class));
答案 1 :(得分:1)
您获得了NullPointerException
,因为您永远不会为Context c
提供值。
因此,也提到user3249477使用方法getActivity()
将值赋给c,如c=getActivity();
或者在启动Intent时直接调用它。这看起来像这样:startActivity(new Intent(getActivity(),xyz.class));