设置视图可见性==从android中的另一个视图消失

设置视图可见性==从android中的另一个视图消失,android,android-layout,android-view,Android,Android Layout,Android View,我是android开发的新手,来自java背景,我正在开发一个android应用程序,其中我必须显示用户收到的邀请,因此布局如下所示 在这里,每个invite视图的单击都会显示invite response视图(是、否、可能),但我希望当用户单击另一个视图时,响应视图关闭或可见性消失。当前,单击“邀请视图”后将显示响应视图 为了解决这个问题,我在每个响应视图中添加了id(inviteId),如下所示 final LinearLayout second = (LinearLayout)

我是android开发的新手,来自java背景,我正在开发一个android应用程序,其中我必须显示用户收到的邀请,因此布局如下所示

在这里,每个invite视图的单击都会显示invite response视图(是、否、可能),但我希望当用户单击另一个视图时,响应视图关闭或可见性消失。当前,单击“邀请视图”后将显示响应视图

为了解决这个问题,我在每个响应视图中添加了id(inviteId),如下所示

    final LinearLayout second = (LinearLayout) inviteView.findViewById(R.id.hidden);
    second.setId((int) currentInviteId);
现在,当用户单击下一个邀请视图并试图将第一个响应视图设置为“GONE”时,我尝试获取第一个打开的响应视图id

公共类邀请片段扩展片段{
private List eventName=new ArrayList();
private List eventId=new ArrayList();
private List eventPlace=new ArrayList();
private List eventMOs=new ArrayList();
private List userMO=new ArrayList();
私人语境;
私人使用场合;
private UserDelegate UserDelegate=new UserDelegate();
private EventDelegates EventDelegates=新EventDelegates();
private Gson Gson=new Gson();
私有进程对话框;
私有EventMO EventMO;
//私人长期比较;
私人共享参考优先权;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
super.onCreate(savedInstanceState);
最终视图=充气机。充气(R.layout.U选项卡,容器,错误);
context=getActivity().getApplicationContext();
prgDialog=newprogressdialog(getActivity());
eventId.clear();
eventName.clear();
eventPlace.clear();
//设置进度对话框文本
setMessage(“请稍候…”);
//将可取消设置为False
prgDialog.setCancelable(假);
prgDialog.show();
DatabaseHelper dbHelper=新的DatabaseHelper(上下文);
final UserMO UserMO=dbHelper.getRingeeUserData(1);
新建异步任务(){
@凌驾
受保护的字符串doInBackground(无效…arg0){
返回eventDelegates.getAllEventForUser(userMO,context);
}
@凌驾
受保护的void onPostExecute(字符串事件列表){
如果(事件列表!=“空”){
eventMOs=gson.fromJson(eventlist,new-TypeToken(){
}.getType());
Toast.makeText(上下文,“eventMo的总项”+eventMOs.size(),Toast.LENGTH\u LONG.show();
对于(EventMO EventMO:eventMOs){
add(eventMO.getText());
add(eventMO.getEventId());
添加(eventMO.getPlace());
}
DatabaseHelper dbHelper=新的DatabaseHelper(上下文);
//long totalInsertion=dbHelper.insertUserRelationTable(userMOs);
prgDialog.disclose();
//Toast.makeText(上下文,“total userMos size”+userMos.size()+“total db insertion size”+totalInsertion,Toast.LENGTH_LONG).show();
ListView occasionView=(ListView)view.findViewById(R.id.invitation\u list\u view);
UserOccessions=新的UserOccessions();
setAdapter(用户场合);
setItemsCanFocus(false);
setTextFilterEnabled(true);
occasionView.setOnItemClickListener(occasionView.getOnItemClickListener());
}
}
}.执行(空,空,空);
返回视图;
}
私有类UserAdapter{
拉平机;
text查看事件名称txtv、事件地点txtv;
用户场合(){
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
public int getCount(){
返回eventMOs.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
//在联系人页面中显示列表值姓名和手机号码
@凌驾
公共视图getView(最终整数位置、视图视图、视图组父视图){
if(inviteView==null){
inviteView=mInflater.inflate(R.layout.invitation,null);
}
EventMO EventMO=eventMOs.get(位置);
最终长currentEventId=eventMO.getEventId();
eventNameTxtV=(TextView)inviteView.findViewById(R.id.invitation_title);
eventPlaceTxtV=(TextView)inviteView.findViewById(R.id.invitation\u place);
eventNameTxtV.setText(eventMO.getText());
eventPlaceTxtV.setText(eventMO.getPlace());
inviteView.setTag(位置);
视图v=inviteView.findviewbyd(R.id.invitation\u single);
final LinearLayout first=(LinearLayout)inviteView.findviewbyd(R.id.invitation\u single);
按钮yesBtn=(按钮)inviteView.findViewById(R.id.yesbutton);
按钮noBtn=(按钮)inviteView.findviewbyd(R.id.nobutton);
按钮mayBeBtn=(按钮)inviteView.findviewbyd(R.id.buttonmaybe);
final LinearLayout second=(LinearLayout)inviteView.findviewbyd(R.id.hidden);
setId((int)currentEventId);
//将当前事件id存储到共享首选项中,比较事件id并在id不同时关闭子布局
prefs=context.getSharedReferences(InvitationFragment.class.getSimpleName(),context.MODE\u PRIVATE);
SharedPreferences.Editor=prefs.edit
public class InvitationFragment extends Fragment {

    private List<String> eventName = new ArrayList<>();
    private List<Long> eventId = new ArrayList<>();
    private List<String> eventPlace = new ArrayList<>();
    private List<EventMO> eventMOs = new ArrayList<>();
    private List<UserMO> userMO = new ArrayList<>();
    private Context context;
    private UserOccasions userOccasions;
    private UserDelegate userDelegate = new UserDelegate();
    private EventDelegates eventDelegates = new EventDelegates();
    private Gson gson = new Gson();
    private ProgressDialog prgDialog;
    private EventMO eventMO;
   // private long compareEventId;
    private SharedPreferences prefs;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final View view = inflater.inflate(R.layout.invitation_tab, container, false);
        context = getActivity().getApplicationContext();
        prgDialog = new ProgressDialog(getActivity());
        eventId.clear();
        eventName.clear();
        eventPlace.clear();
        // Set Progress Dialog Text
        prgDialog.setMessage("Please wait...");
        // Set Cancelable as False
        prgDialog.setCancelable(false);
        prgDialog.show();

        DatabaseHelper dbHelper = new DatabaseHelper(context);
        final UserMO userMO = dbHelper.getRingeeUserData(1);
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... arg0) {
                return eventDelegates.getAllEventForUser(userMO, context);
            }

            @Override
            protected void onPostExecute(String eventlists) {
                if (eventlists != "null") {
                    eventMOs = gson.fromJson(eventlists, new TypeToken<List<EventMO>>() {
                    }.getType());
                    Toast.makeText(context, "total items of eventMo" + eventMOs.size(), Toast.LENGTH_LONG).show();

                    for (EventMO eventMO : eventMOs) {
                        eventName.add(eventMO.getText());
                        eventId.add(eventMO.getEventId());
                        eventPlace.add(eventMO.getPlace());
                    }

                    DatabaseHelper dbHelper = new DatabaseHelper(context);
                    //long totalInsertion = dbHelper.insertUserRelationTable(userMOs);
                    prgDialog.dismiss();
                    //Toast.makeText(context, "total userMos size " + userMOs.size() + "total db insertion size " + totalInsertion, Toast.LENGTH_LONG).show();
                    ListView occasionView = (ListView) view.findViewById(R.id.invitation_list_view);
                    userOccasions = new UserOccasions();
                    occasionView.setAdapter(userOccasions);
                    occasionView.setItemsCanFocus(false);
                    occasionView.setTextFilterEnabled(true);
                    occasionView.setOnItemClickListener(occasionView.getOnItemClickListener());
                }
            }
        }.execute(null, null, null);
        return view;
    }


    private class UserOccasions extends BaseAdapter {
        LayoutInflater mInflater;
        TextView eventNameTxtV, eventPlaceTxtV;

        UserOccasions() {
            mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return eventMOs.size();
        }

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

        @Override
        public long getItemId(int position) {
            return 0;
        }

        // show list values name and mobile number in contact page
        @Override
        public View getView(final int position,View inviteView, ViewGroup parent) {

            if (inviteView == null) {
                inviteView = mInflater.inflate(R.layout.invitation, null);
            }
            EventMO eventMO = eventMOs.get(position);
            final long currentEventId = eventMO.getEventId();

            eventNameTxtV = (TextView) inviteView.findViewById(R.id.invitation_title);
            eventPlaceTxtV = (TextView) inviteView.findViewById(R.id.invitation_place);
            eventNameTxtV.setText(eventMO.getText());
            eventPlaceTxtV.setText(eventMO.getPlace());
            inviteView.setTag(position);
            View v = inviteView.findViewById(R.id.invitation_single);

            final LinearLayout first = (LinearLayout) inviteView.findViewById(R.id.invitation_single);

            Button yesBtn = (Button) inviteView.findViewById(R.id.yesbutton);
            Button noBtn = (Button) inviteView.findViewById(R.id.nobutton);
            Button mayBeBtn = (Button) inviteView.findViewById(R.id.buttonmaybe);

            final LinearLayout second = (LinearLayout) inviteView.findViewById(R.id.hidden);
            second.setId((int) currentEventId);
            // to store current event id into shared preference, to compare event ids and close child layout if ids are differents
            prefs = context.getSharedPreferences(InvitationFragment.class.getSimpleName(), Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putLong("compareEventId", currentEventId);
            editor.commit();

            yesBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    second.setVisibility(View.GONE);
                    final String response = "yes";
                    final EventMO event = new EventMO();
                    event.setIs_Attend(response);

                    new AsyncTask<Void, Void, String>() {
                        protected String doInBackground(Void... arg0) {
                            return eventDelegates.updateEvent(event, context);

                        }

                    }.execute(null, null, null);

                }

            });
            noBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    second.setVisibility(View.GONE);
                    final String response = "no";
                    final EventMO event = new EventMO();
                    event.setIs_Attend(response);

                    new AsyncTask<Void, Void, String>() {
                        protected String doInBackground(Void... arg0) {
                            return eventDelegates.updateEvent(event, context);

                        }

                    }.execute(null, null, null);
                }
            });
            mayBeBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    second.setVisibility(View.GONE);
                    final String response = "maybe";
                    final EventMO event = new EventMO();
                    event.setIs_Attend(response);

                    new AsyncTask<Void, Void, String>() {
                        protected String doInBackground(Void... arg0) {
                            return eventDelegates.addEvent(event, context);


                        }

                    }.execute(null, null, null);
                }
            });


            first.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View invitationView) {
                    final long compareEventId = prefs.getLong("compareEventId", 0);
                    final long currentEventId = second.getId();

                    if(compareEventId != 0 && compareEventId != currentEventId){
                        LayoutInflater inflater = (LayoutInflater)context.getSystemService
                                (Context.LAYOUT_INFLATER_SERVICE);
                        View inflatedView = inflater.inflate(R.layout.invitation, null);

                        final View inviteResponseView =  (View) inflatedView.findViewById((int) compareEventId);
                        inviteResponseView.setVisibility(View.GONE);
                    }
                    switch (invitationView.getId()) {
                        case R.id.invitation_single:
                            second.setVisibility(View.VISIBLE);
                            break;

                    }
                }


            });


            return inviteView;
        }

    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/invitation_single"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="?android:dividerVertical"
    android:dividerPadding="5dp"
    android:showDividers="middle"
    tools:context=".MainActivity">

    <ImageButton
        android:id="@+id/image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/ic_action_event" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:clickable="false"
        android:focusable="true"
        android:orientation="vertical">

        <TextView
            android:id="@+id/invitation_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingRight="0dp"
            android:paddingTop="3dp"
            android:textColor="@color/black"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/invitation_place"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingRight="0dp"
            android:textColor="@color/black"
            android:textSize="15sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/hidden"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_marginLeft="-270dp"
        android:layout_marginTop="60dp"
        android:layout_weight="1"
        android:clickable="true"
        android:focusable="true"
        android:orientation="horizontal"
        android:paddingTop="1dp"
        android:visibility="gone"
        android:weightSum="3">


        <Button
            android:id="@+id/yesbutton"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginLeft="7dp"
            android:layout_weight="1"
            android:background="@color/blue"
            android:text="Yes"
            android:textColor="@color/black"></Button>

        <Button
            android:id="@+id/nobutton"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginLeft="25dp"
            android:layout_weight="1"
            android:background="@color/blue"
            android:text="No"
            android:textColor="@color/black"></Button>

        <Button
            android:id="@+id/buttonmaybe"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginLeft="25dp"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:background="@color/blue"
            android:text="Maybe"
            android:textColor="@color/black"></Button>

    </LinearLayout>


</LinearLayout>
 android:clickable="true"
 android:focusable="true"
 android:focusableInTouchMode="true"
invitationView.setOnFocusChangeListener(new OnFocusChangeListener() {          

        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus)
           {
               inviteResponseView.setVisibility(view.GONE)
           }else
               inviteResponseView.setVisibility(view.VISIBLE)
        }
    });
private boolean showActionView = false;
private int showActionViewFor;

public void showActionView(boolean show, int position) {
    showActionView = show;
    showActionViewFor = position;
    notifyDataSetChanged();
}
if(showActionView && position == showActionViewFor) {
    second.setVisibility(View.VISIBLE);
} else {
    second.setVisibility(View.INVISIBLE);
//Don't use View.GONE
}
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         mAdapter.showActionView(true, position);
     }
 });
mAdapter.showActionView(false, 0);
first.setOnClickListener(new View.OnClickListener() {}