2017-07-06 23 views
0

アクティビティからList<>をフラグメントに渡そうとしていますか?互換性のない型:List をArrayListに変換できません<String>

imageViewをクリックすると、 onClickイベントは、imageViewをクリックしたユーザのuserIdと、参照したいユーザプロファイルのuserIdを取得するサーバへの呼び出しをトリガします.iは、サーバから取得した応答を取得するインタフェースを持っています。新しいフラグメントクラスに送信されます。問題は、List<>をバンドルに渡すことができないことです。

これは、フラグメントクラスのnewInstanceで、パラメータは、この上記の断片がから呼び出されていることをActivityクラスですが

public static HomeUserProfileFragment newInstance(String postTotal, String followersTotal 
     , String followingTotal, List<UploadPost> uploadPostList, List<FollowUser> followersList, List<FollowUser> followingList) { 

    HomeUserProfileFragment fragment = new HomeUserProfileFragment(); 
    Bundle args = new Bundle(); 
    args.putString(POST_TOTAL, postTotal); 
    args.putString(FOLLOWERS_TOTAL, followersTotal); 
    args.putString(FOLLOWING_TOTAL, followingTotal); 
    args.putStringArrayList(UPLOAD_POST_LIST,uploadPostList); 
    args.putStringArrayList(FOLLOWERS_LIST,followersList); 
    args.putStringArrayList(FOLLOWING_LIST, followingList); 
    fragment.setArguments(args); 
    return fragment; 
} 

渡って送信しようとしています。

@Override 
public void onClickUserProfile(String post, String followers, String following, List<UploadPost> uploadPostList, List<FollowUser> followersList, List<FollowUser> followingList) { 

    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.frame_container, HomeUserProfileFragment.newInstance(post, followers, following,uploadPostList,followersList,followingList)) 
      .addToBackStack(null) 
      .commit(); 
} 

したがって、次のエラー取得しています:

Error:(56, 50) error: incompatible types: List<UploadPost> cannot be converted to ArrayList<String> 
Error:(57, 48) error: incompatible types: List<FollowUser> cannot be converted to ArrayList<String> 
Error:(58, 49) error: incompatible types: List<FollowUser> cannot be converted to ArrayList<String> 
+0

'args.putStringArrayList'は動作しませんリストは** StringArrayListではありません** –

答えて

0

使用をお

を使用してバックこのデータを取得することができ

Bundle args= new Bundle(); 
args.putParcelableArrayList(POST_TOTAL, postTotal); 
fragment.setArguments(bundle); 

代わりの

Bundle args = new Bundle(); 
args.putString(POST_TOTAL, postTotal); 
fragment.setArguments(args); 

この後、この

Bundle extras = getIntent().getExtras(); 
ArrayList<ObjectName> arraylist = extras.getParcelableArrayList("arraylist"); 
+0

問題は 'String'値* postTotal *に関するものではないようですので、あなたの(基本的に正しい)アプローチは誤解されるかもしれません。また、OPにはそれぞれの問題クラス(Parcelableを実装する必要があります)(https://developer.android.com/reference/android/os/Parcelable.html)が必要です。 – 0X0nosugar

0

ListArrayListではないことが原因です。私は最終的に解決策を持って

args.putStringArrayList(UPLOAD_POST_LIST, new ArrayList<>(uploadPostList)); 
0

ソリューションは、そのコンストラクタの1とArrayListにあなたのリストをラップするかもしれません。 Parcelable to UploadPostモデルクラスとFollowUserモデルクラスを実装しなければなりませんでした。これらの2つのモデルクラスは、それらを保持する第3のクラスとサーバから送信される他のパラメータで呼び出されるため、モデルクラスにParcelableを実装する必要がありました。その後

:断片クラスのnewInstanceメソッド:

public static HomeUserProfileFragment newInstance(String yourId, String other_UserId, String name,String username,String userImage,String postTotal, String followersTotal 
     , String followingTotal, ArrayList<UploadPost> uploadPostList, ArrayList<FollowUser> followersList, ArrayList<FollowUser> followingList) { 

    HomeUserProfileFragment fragment = new HomeUserProfileFragment(); 
    Bundle args = new Bundle(); 
    args.putString(YOUR_USER_ID, yourId); // this holds the id of the user that his profile wants to be seen. 
    args.putString(VIEWER_USER_ID, other_UserId); // this holds the id of the user that want to see your profile. this Id is used to determine if the user is a friend or not.so if not a friend the follow button will be displayed. 
    args.putString(NAME,name); 
    args.putString(USERNAME, username); 
    args.putString(USER_IMAGE, userImage); 
    args.putString(POST_TOTAL, postTotal); 
    args.putString(FOLLOWERS_TOTAL, followersTotal); 
    args.putString(FOLLOWING_TOTAL, followingTotal); 
    args.putParcelableArrayList(UPLOAD_POST_LIST, uploadPostList); 
    args.putParcelableArrayList(FOLLOWERS_LIST, followersList); 
    args.putParcelableArrayList(FOLLOWING_LIST, followingList); 
    fragment.setArguments(args); 
    return fragment; 
} 

そして、Activityクラスフラグメントの呼び出し:

@Override 
public void onClickUserProfile(String yourId, String viewerId, String name, String username, String userImage, String post, 
           String followers, String following, ArrayList<UploadPost> uploadPostList, ArrayList<FollowUser> followersList, ArrayList<FollowUser> followingList) { 
    this.yourId = yourId; 
    this.viewerId = viewerId; 
    getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.frame_container, HomeUserProfileFragment.newInstance(yourId,viewerId,name, username,userImage,post, followers, following,uploadPostList,followersList,followingList)) 
      .addToBackStack(null) 
      .commit(); 
} 

私の答えである

関連する問題