2017-04-03 2 views
1

je suis en utilisant un fragment de carte google pour afficher la carte en vue android recycleur, j'utiliser ce code pour afficher la carte google grammaticalementAjout fragment de carte de support google problématiquement en mode recyclage android

 SupportMapFragment supportMapFragment = 
SupportMapFragment.newInstance(); 
     supportFragment.beginTransaction().replace(R.id.map_container, 
supportMapFragment).commit(); 

mais le problème est qu'il affiche carte dans seulement le premier élément de la disposition du conteneur de la carte dans la vue recycleur mais pas tous et si je défile dans la vue recycleur alors le premier élément disparaît aussi, à des fins de test j'ai essayé de changer la ressource de fond du conteneur de carte Puis-je montrer fragment de la carte dans tous les éléments

Adaptateur

public class PrivateDialogMessagesAdapter extends BaseDialogMessagesAdapter implements OnMapReadyCallback { 

private static int EMPTY_POSITION = -1; 

Context context; 

GoogleMap map; 

FragmentManager supportFragment; 

private int lastRequestPosition = EMPTY_POSITION; 
private int lastInfoRequestPosition = EMPTY_POSITION; 
private FriendOperationListener friendOperationListener; 

public PrivateDialogMessagesAdapter(
     BaseActivity baseActivity, 
     FriendOperationListener friendOperationListener, 
     List<CombinationMessage> objectsList, 
     ChatUIHelperListener chatUIHelperListener, 
     Dialog dialog, 
     Context context, 
     FragmentManager fragmentManager) { 
    super(baseActivity, objectsList); 
    this.friendOperationListener = friendOperationListener; 
    this.chatUIHelperListener = chatUIHelperListener; 
    this.dialog = dialog; 
    this.context = context; 
    this.supportFragment = fragmentManager; 
} 


@Override 
public PrivateDialogMessagesAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    switch (viewType) { 
     case TYPE_REQUEST_MESSAGE: 
      return new ViewHolder(this, layoutInflater.inflate(R.layout.item_friends_notification_message, viewGroup, false)); 
     case TYPE_OWN_MESSAGE: 
      // MapFragment mapFragment = (MapFragment) ((Activity)context).getFragmentManager().findFragmentById(R.id.location_message_own); 
      //mapFragment.getMapAsync(this); 
      return new ViewHolder(this, layoutInflater.inflate(R.layout.item_message_own, viewGroup, false)); 
     case TYPE_OPPONENT_MESSAGE: 
      return new ViewHolder(this, layoutInflater.inflate(R.layout.item_private_message_opponent, viewGroup, false)); 
     default: 
      return null; 
    } 
} 


@Override 
public void onBindViewHolder(BaseClickListenerViewHolder<CombinationMessage> baseClickListenerViewHolder, int position) { 
    CombinationMessage combinationMessage = getItem(position); 
    boolean ownMessage = !combinationMessage.isIncoming(currentUser.getId()); 

    ViewHolder viewHolder = (ViewHolder) baseClickListenerViewHolder; 
    boolean friendsRequestMessage = DialogNotification.Type.FRIENDS_REQUEST.equals(
      combinationMessage.getNotificationType()); 
    boolean friendsInfoRequestMessage = combinationMessage 
      .getNotificationType() != null && !friendsRequestMessage; 

    if (viewHolder.verticalProgressBar != null) { 
     viewHolder.verticalProgressBar.setProgressDrawable(baseActivity.getResources().getDrawable(R.drawable.vertical_progressbar)); 
    } 

    if (friendsRequestMessage) { 
     viewHolder.messageTextView.setText(combinationMessage.getBody()); 
     viewHolder.timeTextMessageTextView.setText(DateUtils.formatDateSimpleTime(combinationMessage.getCreatedDate())); 

     setVisibilityFriendsActions(viewHolder, View.GONE); 
    } else if (friendsInfoRequestMessage) { 
     viewHolder.messageTextView.setText(combinationMessage.getBody()); 
     viewHolder.timeTextMessageTextView.setText(DateUtils.formatDateSimpleTime(combinationMessage.getCreatedDate())); 

     setVisibilityFriendsActions(viewHolder, View.GONE); 

     lastInfoRequestPosition = position; 
    } else if (combinationMessage.getAttachment() != null) { 
     resetUI(viewHolder); 

     setViewVisibility(viewHolder.progressRelativeLayout, View.VISIBLE); 
     viewHolder.timeAttachMessageTextView.setText(DateUtils.formatDateSimpleTime(combinationMessage.getCreatedDate())); 

     if (ownMessage && combinationMessage.getState() != null) { 
      setMessageStatus(viewHolder.attachDeliveryStatusImageView, State.DELIVERED.equals(
        combinationMessage.getState()), State.READ.equals(combinationMessage.getState())); 
     } 

     displayAttachImageById(combinationMessage.getAttachment().getAttachmentId(), viewHolder); 
    } else if (combinationMessage.getBody().toString().equals("no")) { 
     resetUI(viewHolder); 
     setViewVisibility(viewHolder.ownLocationMessageContainer, View.VISIBLE); 
     viewHolder.ownLocationMessageContainer.setBackgroundColor(context.getResources().getColor(R.color.main_color)); 

     SupportMapFragment supportMapFragment = SupportMapFragment.newInstance(); 
     supportFragment.beginTransaction().replace(R.id.map_container, supportMapFragment).commit(); 

    } else { 
     resetUI(viewHolder); 

     setViewVisibility(viewHolder.textMessageView, View.VISIBLE); 
     viewHolder.messageTextView.setText(combinationMessage.getBody()); 
     viewHolder.timeTextMessageTextView.setText(DateUtils.formatDateSimpleTime(combinationMessage.getCreatedDate())); 

     if (ownMessage && combinationMessage.getState() != null) { 
      setMessageStatus(viewHolder.messageDeliveryStatusImageView, State.DELIVERED.equals(
        combinationMessage.getState()), State.READ.equals(combinationMessage.getState())); 
     } else if (ownMessage && combinationMessage.getState() == null) { 
      //viewHolder.messageDeliveryStatusImageView.setImageResource(android.R.color.transparent); 
     } 
    } 


    if (!State.READ.equals(combinationMessage.getState()) && !ownMessage && baseActivity.isNetworkAvailable()) { 
     combinationMessage.setState(State.READ); 
     QBUpdateStatusMessageCommand.start(baseActivity, ChatUtils.createQBDialogFromLocalDialog(dataManager, dialog), combinationMessage, true); 
    } 

    // check if last messageCombination is request messageCombination 
    boolean lastRequestMessage = (position == getAllItems().size() - 1 && friendsRequestMessage); 
    if (lastRequestMessage) { 
     findLastFriendsRequest(); 
    } 

    // check if friend was rejected/deleted. 
    if (lastRequestPosition != EMPTY_POSITION && lastRequestPosition < lastInfoRequestPosition) { 
     lastRequestPosition = EMPTY_POSITION; 
    } else if ((lastRequestPosition != EMPTY_POSITION && lastRequestPosition == position)) { // set visible friends actions 
     setVisibilityFriendsActions(viewHolder, View.VISIBLE); 
     initListeners(viewHolder, position, combinationMessage.getDialogOccupant().getUser().getUserId()); 
    } 
} 

@Override 
public int getItemViewType(int position) { 
    return getItemViewType(getItem(position)); 
} 

public void clearLastRequestMessagePosition() { 
    lastRequestPosition = EMPTY_POSITION; 
} 

public void findLastFriendsRequestMessagesPosition() { 
    new FindLastFriendsRequestThread().run(); 
} 

private void setVisibilityFriendsActions(ViewHolder viewHolder, int visibility) { 
    setViewVisibility(viewHolder.acceptFriendImageView, visibility); 
    setViewVisibility(viewHolder.dividerView, visibility); 
    setViewVisibility(viewHolder.rejectFriendImageView, visibility); 
} 

private void initListeners(ViewHolder viewHolder, final int position, final int userId) { 
    viewHolder.acceptFriendImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      friendOperationListener.onAcceptUserClicked(position, userId); 
     } 
    }); 

    viewHolder.rejectFriendImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      friendOperationListener.onRejectUserClicked(position, userId); 
     } 
    }); 
} 

private void findLastFriendsRequest() { 
    for (int i = 0; i < getAllItems().size(); i++) { 
     findLastFriendsRequest(i, getAllItems().get(i)); 
    } 
} 

private void findLastFriendsRequest(int position, CombinationMessage combinationMessage) { 
    boolean ownMessage; 
    boolean friendsRequestMessage; 
    boolean isFriend; 

    if (combinationMessage.getNotificationType() != null) { 
     ownMessage = !combinationMessage.isIncoming(currentUser.getId()); 
     friendsRequestMessage = DialogNotification.Type.FRIENDS_REQUEST.equals(
       combinationMessage.getNotificationType()); 

     if (friendsRequestMessage && !ownMessage) { 
      isFriend = dataManager.getFriendDataManager(). 
        getByUserId(combinationMessage.getDialogOccupant().getUser().getUserId()) != null; 
      if (!isFriend) { 
       lastRequestPosition = position; 
      } 
     } 
    } 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    LatLng sydney = new LatLng(-33.867, 151.206); 

    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    googleMap.setMyLocationEnabled(true); 
    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13)); 

    googleMap.addMarker(new MarkerOptions() 
      .title("Sydney") 
      .snippet("The most populous city in Australia.") 
      .position(sydney)); 
} 

private class FindLastFriendsRequestThread extends Thread { 

    @Override 
    public void run() { 
     findLastFriendsRequest(); 
    } 
} 
} 

XML mise en page un

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:animateLayoutChanges="true" 
android:orientation="horizontal" 
android:padding="10dp"> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right" 
    android:orientation="vertical"> 

    <include layout="@layout/view_chat_progress_bars" /> 

    <include layout="@layout/view_chat_text_message_own" /> 

    <include layout="@layout/view_chat_attach_message_own" /> 

    <include layout="@layout/view_location_message_own" /> 

</LinearLayout> 



</FrameLayout> 

XML mise en page deux

<FrameLayout android:layout_height="100dp" 
android:layout_width="100dp" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/view_location_message_own" 
android:background="@color/red"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/map_container" /> 


</FrameLayout> 

Répondre

0

J'observe seulement une des valeurs de longitude latitude & u appliquent des & que u r l'application de la position de l'élément par getitem. il montre seulement que votre position actuelle de recycleur chargera cela prendra plus de temps pour charger toute la liste.

@Override

getItemViewType public int (int position) {

return getItemViewType(getItem(position)); 

}

alors essayez celui-ci.

@Override

getItemViewType public int (position int) {

si (objectsList! = Null & & objectsList.size()> 0) {

return objectsList.size(); 

}

else {

return null; 

} 

}