如何获取用户输入并将其传递给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);
}
}
太谢谢你了!但我实际上忘了问我怎么才能立即移动到我点击按钮后发送数据的片段? – Dawn17
“片段”处于当前活动或下一个活动中。 – KeLiuyue
下一个活动。 – Dawn17