2017-10-29 26 views
0

在我的應用我的活動之一,如何獲取用戶輸入並將其傳遞給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任何想法,我做錯了什麼?

回答

0

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

相關問題