Java Android:如何将片段上的值传递给Activity类(处理TabPages)

Java Android:如何将片段上的值传递给Activity类(处理TabPages),java,android,android-fragments,Java,Android,Android Fragments,我想知道如何像C#中的会话一样将我的值传递给Android。这是我正在加载主页的登录类 String sEmployeeName = Message.toString(); String sEmployeeID = UserID; Person person = new Person(); person.setFirstName("Welcome, " + sEmployeeName); pers

我想知道如何像C#中的会话一样将我的值传递给Android。这是我正在加载主页的登录类

String sEmployeeName = Message.toString();
            String sEmployeeID = UserID;

            Person person = new Person();

            person.setFirstName("Welcome, " + sEmployeeName);
            person.setLastName(UserID);



            Intent intentMain = new Intent(LoginActivity.this ,
                    SwipePageActivity.class);
            intentMain.putExtra("Person", person);
            startActivity(intentMain);
请注意,我的SwipePageActivity.Class是要加载TabPages的类。我创建了一个Tab1类来填充第一个选项卡中的活动。在我的Tab1片段中,我有这样一个代码

public class Tab1 extends Fragment {

    @Nullable
    @Override

        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.activity_main,container,false );
            return rootView;

        }
    }
import  java.io.Serializable;

public class Person implements Serializable {

    String sFirstName;
    String sLastName;

    public void setFirstName(String sFirstName){
        this.sFirstName = sFirstName;
    }

    public void setLastName(String sLastName){
        this.sLastName = sLastName;
    }

    public String getFirstName()
    {
        return sFirstName;
    }

    public String getLastName()
    {
        return sLastName;
    }

}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Person person = (Person)  getIntent().getExtras().getSerializable("Person");

        final Button btnSearch = (Button) findViewById(R.id.btnSearch);
        //final Button btnLogout = (Button) findViewById(R.id.btnLogout);
        final Button btnApprove = (Button) findViewById(R.id.btnApprove);
        listView = (ListView) findViewById(R.id.listView);

        findViewById(R.id.txtEmployeeID).setVisibility(View.GONE);

        final TextView tvID = (TextView) findViewById(R.id.txtEmployeeID);

        TextView tvName = (TextView) findViewById(R.id.txtEmployeeName);
        tvName.setText(person.getFirstName());
        tvID.setText(person.getLastName());

        assert btnSearch != null;
        assert btnApprove != null;
        //assert btnLogout != null;
}
类代码如下所示

public class Tab1 extends Fragment {

    @Nullable
    @Override

        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.activity_main,container,false );
            return rootView;

        }
    }
import  java.io.Serializable;

public class Person implements Serializable {

    String sFirstName;
    String sLastName;

    public void setFirstName(String sFirstName){
        this.sFirstName = sFirstName;
    }

    public void setLastName(String sLastName){
        this.sLastName = sLastName;
    }

    public String getFirstName()
    {
        return sFirstName;
    }

    public String getLastName()
    {
        return sLastName;
    }

}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Person person = (Person)  getIntent().getExtras().getSerializable("Person");

        final Button btnSearch = (Button) findViewById(R.id.btnSearch);
        //final Button btnLogout = (Button) findViewById(R.id.btnLogout);
        final Button btnApprove = (Button) findViewById(R.id.btnApprove);
        listView = (ListView) findViewById(R.id.listView);

        findViewById(R.id.txtEmployeeID).setVisibility(View.GONE);

        final TextView tvID = (TextView) findViewById(R.id.txtEmployeeID);

        TextView tvName = (TextView) findViewById(R.id.txtEmployeeName);
        tvName.setText(person.getFirstName());
        tvID.setText(person.getLastName());

        assert btnSearch != null;
        assert btnApprove != null;
        //assert btnLogout != null;
}
在我的activity_主布局中,我有一个这样编码的java类

public class Tab1 extends Fragment {

    @Nullable
    @Override

        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.activity_main,container,false );
            return rootView;

        }
    }
import  java.io.Serializable;

public class Person implements Serializable {

    String sFirstName;
    String sLastName;

    public void setFirstName(String sFirstName){
        this.sFirstName = sFirstName;
    }

    public void setLastName(String sLastName){
        this.sLastName = sLastName;
    }

    public String getFirstName()
    {
        return sFirstName;
    }

    public String getLastName()
    {
        return sLastName;
    }

}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Person person = (Person)  getIntent().getExtras().getSerializable("Person");

        final Button btnSearch = (Button) findViewById(R.id.btnSearch);
        //final Button btnLogout = (Button) findViewById(R.id.btnLogout);
        final Button btnApprove = (Button) findViewById(R.id.btnApprove);
        listView = (ListView) findViewById(R.id.listView);

        findViewById(R.id.txtEmployeeID).setVisibility(View.GONE);

        final TextView tvID = (TextView) findViewById(R.id.txtEmployeeID);

        TextView tvName = (TextView) findViewById(R.id.txtEmployeeName);
        tvName.setText(person.getFirstName());
        tvID.setText(person.getLastName());

        assert btnSearch != null;
        assert btnApprove != null;
        //assert btnLogout != null;
}
我想要的是获取我在Person类中传递给Login类的值

有人能帮我吗

如果您需要我的页面适配器代码,请点击这里

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
            case 0:
                Tab1 tab1 = new Tab1();
                return  tab1;
            case 1:
                Tab2 tab2 = new Tab2();
                return  tab2;
            case 2:
                Tab3 tab3 = new Tab3();
                return  tab3;
        }
        return  null;
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        //return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "APPROVAL";
            case 1:
                return "NONE";
            case 2:
                return "NONE";
        }
        return null;
    }
}

您需要将Person对象传递给适配器的构造函数,然后在getItem方法中创建Bundle对象并将该Person保存到其中(Bundle.putParcalable)。然后将该包传递给片段(tab1.setArguments(bundle))

要在片段中获取Person对象,请创建Bundle对象并从片段的参数(getArguments())获取它。然后从包中获取Person对象:

public class Tab1 extends Fragment {

    private Person person;

    @Nullable
    @Override

        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            Bundle bundle = getArguments();
            person = (Person) bundle.getParcelable("person");
            View rootView = inflater.inflate(R.layout.activity_main,container,false );
            return rootView;

        }
    }

现在您的片段中有了Person对象!:)

这个问题一点也不清楚,但如果我理解的话,你想知道登录的“人”的信息

我会这样做:

亲自上课:

public class Person implements... {
private static Person currentPerson;

public static Person getCurrentPerson(){
return currentPerson;

public static void setCurrentPerson(Person current){
currentPerson = current;
}
当您登录时,将currentUser设置为Person.setCurrentPerson()

当您想要获取它时,可以调用Person.getCurrentPerson()

当您注销时,将CurrentPerson设置为null


希望对您有所帮助。

您好,我编辑了我的问题,发布了我的个人课程。@eljon_i3您尝试过我的答案吗?这不是您需要的吗?但是我如何才能将Person值获取到MainActivity.Class?您有Person对象,因此可以从中获取值。person.getFirstName();person.getLastName();我不明白你的意思。您希望在片段或MainActivity中的MainActivityy?中使用Person值。然后告诉我您在哪里为MainActivity类创建Intent,因为您需要将Person对象传递到Intent中