Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android RecyclerView中添加有问题的google地图片段_Android_Android Fragments_Android Recyclerview_Supportmapfragment - Fatal编程技术网

在Android RecyclerView中添加有问题的google地图片段

在Android RecyclerView中添加有问题的google地图片段,android,android-fragments,android-recyclerview,supportmapfragment,Android,Android Fragments,Android Recyclerview,Supportmapfragment,我正在使用Google地图片段在RecyclerView中显示地图。我使用以下代码显示谷歌地图: SupportMapFragment supportMapFragment = SupportMapFragment.newInstance(); supportFragment.beginTransaction().replace(R.id.map_container, supportMapFragment).commit(); 但问题是它只在地图容器的第

我正在使用Google地图片段在RecyclerView中显示地图。我使用以下代码显示谷歌地图:

        SupportMapFragment supportMapFragment =  
SupportMapFragment.newInstance();
        supportFragment.beginTransaction().replace(R.id.map_container, 
supportMapFragment).commit(); 
但问题是它只在地图容器的第一个元素中显示地图。RecyclerView中的框架布局,但不是全部,如果我滚动RecyclerView,那么第一个元素也会消失。出于测试目的,我尝试更改map容器的后台资源,它对所有元素都有效,但是如何在所有元素中显示map片段

适配器

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();
    }
}
}
公共类PrivateDialogMessagesAdapter扩展了BaseDialogMessagesAdapter在MapreadyCallback上实现{
私有静态int空_位置=-1;
语境;
谷歌地图;
碎片;
private int lastRequestPosition=空位置;
private int lastformrequestposition=空位置;
私人FriendOperationListener FriendOperationListener;
公私对话消息适配器(
基本活动基本活动,
FriendOperationListener FriendOperationListener,
列表对象列表,
ChatUIHelperListener ChatUIHelperListener,
对话对话,
语境,
碎片管理器(碎片管理器){
超级(baseActivity,objectsList);
this.friendOperationListener=friendOperationListener;
this.chatUIHelperListener=chatUIHelperListener;
this.dialog=dialog;
this.context=上下文;
this.supportFragment=碎片管理器;
}
@凌驾
public PrivateDialogMessagesAdapter.ViewHolder onCreateViewHolder(ViewGroup ViewGroup,int viewType){
开关(视图类型){
案例类型请求消息:
返回新的ViewHolder(此,LayoutFlater.充气(R.layout.item_friends_notification_message,viewGroup,false));
案例类型\u自身\u消息:
//MapFragment MapFragment=(MapFragment)((活动)上下文).getFragmentManager().findFragmentById(R.id.location\u message\u own);
//getMapAsync(这个);
返回新的ViewHolder(此,LayoutFlater.充气(R.layout.item_消息_own,viewGroup,false));
案例类型\u对手\u消息:
返回新的ViewHolder(此,LayoutFlater.充气(R.layout.item_private_message_Operator,viewGroup,false));
违约:
返回null;
}
}
@凌驾
BindViewHolder上的公共无效(基本ClickListenervieWholder基本ClickListenrvieWholder,内部位置){
CombinationMessage CombinationMessage=getItem(位置);
布尔值ownMessage=!combinationMessage.isIncoming(currentUser.getId());
ViewHolder ViewHolder=(ViewHolder)baseClickListenerViewHolder;
布尔friendsRequestMessage=DialogNotification.Type.FRIENDS\u REQUEST.equals(
combinationMessage.getNotificationType());
布尔friendsInfoRequestMessage=combinationMessage
.getNotificationType()!=null&!friendsRequestMessage;
如果(viewHolder.verticalProgressBar!=null){
viewHolder.verticalProgressBar.setProgressDrawable(baseActivity.getResources().getDrawable(R.drawable.vertical_progressbar));
}
如果(friendsRequestMessage){
viewHolder.messageTextView.setText(combinationMessage.getBody());
viewHolder.timeTextMessageTextView.setText(DateUtils.formatDateSimpleTime(combinationMessage.getCreatedDate());
设置VisibilityFriendsActions(viewHolder,View.GONE);
}else if(friendsInfoRequestMessage){
viewHolder.messageTextView.setText(combinationMessage.getBody());
viewHolder.timeTextMessageTextView.setText(DateUtils.formatDateSimpleTime(combinationMessage.getCreatedDate());
设置VisibilityFriendsActions(viewHolder,View.GONE);
lastInfoRequestPosition=位置;
}else if(combinationMessage.getAttachment()!=null){
重置UI(视图持有者);
setViewVisibility(viewHolder.progressRelativeLayout,View.VISIBLE);
viewHolder.TimeAttachMessageGetExtView.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”)){
重置UI(视图持有者);
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_容器,supportMapFragment.commit();
}否则{
重置UI(视图持有者);
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);
}
}
如果(!State.READ.equals(combinationMessage.getState())&&&!ownMessage&&baseActivity.isNetworkAvailable()){
组合消息.setState(State.READ);
启动(baseActivity,ChatUtils.createQBDialogFromLocalDialog(dataManager,dialog),combinationMessage,true);
}
//检查
<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>
<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>