无法将Logout按钮添加到Tab Fragment Class?

时间:2016-12-30 22:02:41

标签: android android-studio android-fragments

我最近创建了一个简单的应用程序,允许用户注册信息,登录和注销。我想通过添加用户登录时看到的选项卡式活动来增加此应用程序的复杂性,并让第三个选项卡包含将其注销的TextView。

以下是我在添加标签之前在主要活动中注销的内容:

public class MainActivity extends AppCompatActivity{
    private Button bLogout;
    private Session session;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        session = new Session(this);
        if(!session.loggedin()){
            logout();
        }
        bLogout = (Button) findViewById(R.id.bLogout);
        bLogout.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                logout();
            }
        });
    }

    private void logout(){
        session.setLoggedin(false);
        finish();
        startActivity(new Intent(MainActivity.this, LoginActivity.class));
    }
}

现在,我想将这个相同的概念转移到我的Tab3 Fragment Class,但我一直都会遇到错误。这是Tab3类没有错误:

public class Tab3User extends Fragment{
    private TextView tvLogout;
    private Session session;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab3User, container, false);

        tvLogout = (TextView) rootView.findViewById(R.id.tvLogout);
        return rootView;
    }

}

当我尝试使用此作为上下文创建新会话时,以及在'startActivity'中发生错误。当我尝试使用' Tab3User.this'时,我的注销功能中的方法。 onClickListener似乎正在工作,但我对android dev非常新,所以我确定我只是犯了一个错误。这是我尝试添加所有内容:

public class Tab3User extends Fragment{
    private TextView tvLogout;
    private Session session;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab3User, container, false);

        tvLogout = (TextView) rootView.findViewById(R.id.tvLogout);
        return rootView;

        //error here under the "this"
        session = new Session(this);

        if(!session.loggedin()){
            logout();
        }
        tvLogout.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                logout();
            }
        });
    }

    private void logout(){
        session.setLoggedin(false);
        finish();
        startActivity(new Intent(Tab3User.this, LoginActivity.class));
    }

}

感谢您的帮助。我一直在网上看,但很多这样的问题答案很模糊,所以我决定发帖。

1 个答案:

答案 0 :(得分:0)

在片段内部,您需要使用getContext()/ getActivity()。

session = new Session(getContext());