如何获取用户输入并将其传递给Android Sutdio中的另一个片段?

问题描述:

在我的应用我的活动之一,如何获取用户输入并将其传递给Android Sutdio中的另一个片段?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_input); 

    idInput = (EditText) findViewById(R.id.user_id_input); 

    submitButton = (Button) findViewById((R.id.submit_button)); 
    submitButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      githubID = idInput.getText().toString(); 
     } 
    }); 

} 

我创建了一个部分,其中用户可以输入一个名为“githubID”字符串。我试图将这个提交给另一个名为profile_tab的片段,其中github API URL被解析并用于显示用户的信息。该profile_tab样子:

public class ProfileTab extends Fragment{ 

    // URL of the Github API to be parsed 
    final String APIURL = "https://api.github.com/users/" + userID; 

    // All TextView data to be displayed on the profile_tab layout 
    ... 

    // Data for the profile(avatar) image 
    ... 

    // ViewPager for navigating to another tab 
    private ViewPager viewPager; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    ... 

我怎样才能从第一页的输入字符串,然后传递值到ProfileTab页面并更换“用户ID”的字符串?

编辑:

UserInput.java

public class UserInput extends AppCompatActivity { 

    String githubID; 

    EditText idInput; 

    Button submitButton; 

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

     idInput = (EditText) findViewById(R.id.user_id_input); 

     submitButton = (Button) findViewById((R.id.submit_button)); 

     SharedDataUtils.createSP(this, idInput.getText().toString()); 

     submitButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       githubID = idInput.getText().toString(); 
       Intent intent = new Intent(UserInput.this, MainActivity.class); 
       intent.putExtra("flag", 1); 
       startActivity(intent); 

      } 
     }); 
    } 

} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private FragmentManager fragmentManager; 
    private FragmentTransaction fragmentTransaction; 

    private SectionsPageAdapter pageAdapter; 
    private ViewPager viewPager; 


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

     fragmentManager = getSupportFragmentManager(); 
     fragmentTransaction = fragmentManager.beginTransaction(); 

     Intent intent = getIntent(); 

     int flag = intent.getIntExtra("flag", -1); 
     if(flag > 0) { 
      if(flag == 1) { 
       fragmentTransaction.replace(R.id.layout, ProfileTab); 
      } 
     } 


     pageAdapter = new SectionsPageAdapter(getSupportFragmentManager()); 

     // Sets up the ViewPager with the sections adapter 

     viewPager = (ViewPager) findViewById(R.id.container); 
     setupViewPager(viewPager); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager((viewPager)); 
    } 

    // Adds fragments to SectionsPageAdapter and gives names for the corresponding tab 

    private void setupViewPager(ViewPager viewPager) { 
     SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new ProfileTab(), "Profile"); 
     adapter.addFragment(new GithubTab(), "Github Repos"); 
     adapter.addFragment(new FollowerTab(), "Followers"); 
     adapter.addFragment(new FollowingTab(), "Followings"); 
     viewPager.setAdapter(adapter); 
    } 

} 

ProfileTab.java(片段解析JSON)

public class ProfileTab extends Fragment{ 

    // URL of the Github API to be parsed 
    private String APIURL; 
    private String userID; 

    // All TextView data to be displayed on the profile_tab layout 
    private TextView githubID; 
    private TextView numRepos; 
    private TextView numFollowers; 
    private TextView numFollowings; 
    private TextView userBio; 
    private TextView userWebsite; 
    private TextView userName; 
    private TextView createdDate; 

    // Data for the profile(avatar) image 
    private ImageView avatarImage; 
    private String avatarURL; 
    Bitmap imageBitmap; 

    // ViewPager for navigating to another tab 
    private ViewPager viewPager; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     ... code hidden ... 
    } 

这是我看你的帮助后,没有和我对

int flag = intent.getIntExtra("flag", -1); 
    if(flag > 0) { 
     if(flag == 1) { 
      fragmentTransaction.replace(R.id.layout, ProfileTab); 
     } 
    } 

得到一个错误的MainActivity.java任何想法,我做错了什么?

1,创建SharedPreferenceUtils保存和获取数据

public class SharedPreferenceUtils { 

    private static final String SP_NAME = "sp"; 
    public static final String USER_ID = "userId"; 


    // create 
    public static boolean createSP(Context context, String userId) { 
     SharedPreferences.Editor editor = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE).edit(); 
     editor.putString(USER_ID, userId); 
     return editor.commit(); 
    } 


    // get userID 
    public static String getUserId(Context context) { 
     SharedPreferences sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE); 
     return sp.getString(USER_ID, ""); 
    } 
} 

Activity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_input); 

    idInput = (EditText) findViewById(R.id.user_id_input); 

    submitButton = (Button) findViewById((R.id.submit_button)); 
    // edited here ,create and save useId 
    SharedPreferenceUtils.createSP(this, idInput.getText().toString()); 
    submitButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      githubID = idInput.getText().toString(); 
      // edited here 
      Intent intent = new Intent(UserInputActivity.this, YourNextActivity.class); 
      intent.putExtra("flag", 1); 
      startActivity(intent); 
     } 
    }); 
} 

3.get数据2.Sava数据Fragment

private String APIURL; 
private String userID; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    ... 
    // edited here , get userId 
    userID = SharedPreferenceUtils.getUserId(getActivity()); 
    APIURL = "https://api.github.com/users/" + userID; 
} 

4. NextActivity

private FragmentManager fmanager; 
private FragmentTransaction ftransaction; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_your_next); 
    fmanager = getSupportFragmentManager(); 
    ftransaction = fmanager.beginTransaction(); 

    Intent intert = getIntent(); 
    int flag = intert.getIntExtra("flag", -1); 
    if (flag > 0) { 
     System.out.println("flag" + flag); 
     if (flag == 1) { 
      // go to fragment 
      ftransaction.replace(R.id.layout, yourFrgament); 
     } 
    } 
} 

编辑

// position is the fragment you want to go 
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
tabLayout.setupWithViewPager((viewPager)); 
int flag = intent.getIntExtra("flag", -1); 
if(flag > 0) { 
    if(flag == 1) { 
     viewPager.setCurrentItem(your_tab_position); 
    } 
} 
+0

太谢谢你了!但我实际上忘了问我怎么才能立即移动到我点击按钮后发送数据的片段? – Dawn17

+0

“片段”处于当前活动或下一个活动中。 – KeLiuyue

+0

下一个活动。 – Dawn17