Android:getApplication()对于类型View.OnClickListener()未定义

Android:getApplication()对于类型View.OnClickListener()未定义,android,android-fragments,Android,Android Fragments,我目前正在尝试在我的android应用程序中实现Facebook的登录功能。我在工作中遇到了问题 Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class); 出现错误时,类型new View.OnClickListener的getApplication()方法未定义。我已经研究了关于这个问题的其他问题,但是我还没有找到解决办法。就我个人而言,我相信这可能与我使用片段这一事实有关,但我对这个概念还不熟悉,

我目前正在尝试在我的android应用程序中实现Facebook的登录功能。我在工作中遇到了问题

Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class);
出现错误时,类型new View.OnClickListener的getApplication()方法未定义。我已经研究了关于这个问题的其他问题,但是我还没有找到解决办法。就我个人而言,我相信这可能与我使用片段这一事实有关,但我对这个概念还不熟悉,所以不知道如何解决这个问题,或者这是否与此有关

课程

public class SelectionFragment extends Fragment {

private static final String TAG = "SelectionFragment";
private ImageButton mAddButton;

@Override
public View onCreateView(LayoutInflater inflater, 
        ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View view = inflater.inflate(R.layout.selection, 
            container, false);
    mAddButton = (ImageButton) view.findViewById(R.id.diaryform_home_add);

    mAddButton.setOnClickListener(new View.OnClickListener() { //Listens for a user to interact with the save button
        public void onClick(View v) {
            // Do something to save the data
            Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class);
            startActivity(diaryIntent);

        }
    });

    return view;
感谢您的指导,提前感谢您

编辑:@mike2013@codeMagic@crazyPixel都给了我正确的答案,但我不能给他们所有的正确答案,所以我给了第一个答案正确的记号。谢谢您的回答,谢谢。

更改

Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class);
Intent diaryIntent = new Intent(getActivity(), DiaryListActivity.class);

对于
Intent
构造函数,您需要一个
Context
,而不是一个应用程序,尽管我认为您想要的是
getApplicationContext()
,但是,无论哪种方式,只需使用单击的
视图的
Context

改变

Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class);
Intent diaryIntent = new Intent(getActivity(), DiaryListActivity.class);

对于
Intent
构造函数,您需要一个
Context
,而不是一个应用程序,尽管我认为您想要的是
getApplicationContext()
,但是,无论哪种方式,只需使用单击的
视图的
Context

更改您的:

Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class);

改变

Intent diaryIntent = new Intent(getActivity(), DiaryListActivity.class);
由于使用的是片段,因此必须使用getActivity()而不是context.getApplicationContext()

我很肯定这会奏效的祝你好运

更改您的:

Intent diaryIntent = new Intent(getApplication(), DiaryListActivity.class);

改变

Intent diaryIntent = new Intent(getActivity(), DiaryListActivity.class);
由于使用的是片段,因此必须使用getActivity()而不是context.getApplicationContext()


我很肯定这会奏效的祝你好运

要启动活动,您需要在片段使用中使用活动上下文-

getActivity().getApplicationContext()

而不是

getApplication()
要继续进行该活动,请使用-

getActivity().startActivity(intent)

一个好的经验法则是,片段是“内部”活动,即它们的上下文(以及所有相关内容)来自它们所在的活动。

要启动活动,您需要在片段使用中使用活动上下文-

getActivity().getApplicationContext()

而不是

getApplication()
要继续进行该活动,请使用-

getActivity().startActivity(intent)

一个好的经验法则是,片段是“内部”活动,即它们的上下文(以及所有相关内容)来自它们所在的活动。

@barryspikebob我很高兴它对您有用。这可能会比其他一些方法稍好一些,原因有两个,包括如果要将此代码移动到不同的
onClick()
或similar@barryspikebob我很高兴它对你有用。这可能会比其他一些方法稍好一些,原因有两个,包括如果您想将此代码移动到不同的
onClick()
或类似的位置,它更便于移植。。我很高兴能帮上忙……)没问题。。我很高兴能帮上忙……)