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