【问题标题】:change visibility of textView in android在android中更改textView的可见性
【发布时间】:2017-01-13 08:59:20
【问题描述】:

我正在使用带有 2 个文本视图的列表视图。 1 textView 的可见性在 XML 中设置为 GONE。单击列表项时,我希望其文本视图可见。当它再次被点击时,我希望它消失。此外,当在 listView 中单击任何其他项目时,只有它的 textView 应该可见。我正在尝试使用下面的代码,但是当再次选择相同的列表项时,Textview 并没有变为 GONE。

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//to change the visibility of Prevoiusly selected textview to GONE
            if (pwdView != null)
                pwdView.setVisibility(View.GONE);
            pwdView = (TextView) view.findViewById(R.id.saved_pwd);
            if (pwdView.getVisibility()==View.VISIBLE)
                pwdView.setVisibility(View.GONE);
            else
                pwdView.setVisibility(View.VISIBLE);
        }
    });

适配器代码:

public class PwdCursorAdaptor extends CursorAdapter {
public PwdCursorAdaptor(Context context, Cursor c) {
    super(context, c, 0);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.list_items, parent, false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView saved_id = (TextView) view.findViewById(R.id.saved_id);
    TextView saved_password_data=(TextView)view.findViewById(R.id.saved_pwd);
    int pass_index=cursor.getColumnIndex(PwdContract.PasswordEntry.COL_PASSSWORD);
    int id_index = cursor.getColumnIndex(PwdContract.PasswordEntry.COL_LOGIN_ID);
    saved_id.setText(cursor.getString(id_index));
    saved_password_data.setText(cursor.getString(pass_index));
}

}

【问题讨论】:

  • 您也可以根据您希望它再次可见的功能使用不可见
  • 你必须在你的 .XML 文件中设置你的 textView VISIBILITY.GONE。并在你的代码中删除这一行 pwdView.setVisibility(View.GONE);
  • 让我知道发生了什么。
  • @SagarAghara 我希望以前可见的 textView 在单击任何其他列表项时消失。我已经在 XML 中将其可见性设置为 GONE。
  • 向我们展示您的适配器代码

标签: android


【解决方案1】:
   lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
   {
       TextView  pwdView = (TextView) view.findViewById(R.id.saved_pwd);
        if (pwdView !=null)
       {
            pwdView.setVisibility(pwdView.getVisibility()==View.VISIBLE ? View.GONE : View.VISIBLE);
        }
         notifyDatasetChanged();
    }
   });`

【讨论】:

    【解决方案2】:

    这是因为点击监听是异步调用。所以你必须通知适配器数据项发生了变化。

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (pwdView != null)
                pwdView.setVisibility(View.GONE);
            pwdView = (TextView) view.findViewById(R.id.saved_pwd);
            if (pwdView.getVisibility()==View.VISIBLE)
                pwdView.setVisibility(View.GONE);
            else
                pwdView.setVisibility(View.VISIBLE);
    
    
             yourAdapter.notifyDataSetChanged();
        }
    });`
    

    【讨论】:

    • 它只是由yourAdapterObject.notifyDatasetChanged();调用它是适配器的覆盖方法
    • 那是因为你在 onBindview() 中更新了视图。在 OnBindView () 上添加登录
    【解决方案3】:

    就像在你的适配器类中那样做

    @Override
        public void bindView(View view, Context context, Cursor cursor) {
            TextView saved_id = (TextView) view.findViewById(R.id.saved_id);
            final TextView saved_password_data=(TextView)view.findViewById(R.id.saved_pwd);
            int pass_index=cursor.getColumnIndex(PwdContract.PasswordEntry.COL_PASSSWORD);
            int id_index = cursor.getColumnIndex(PwdContract.PasswordEntry.COL_LOGIN_ID);
            saved_id.setText(cursor.getString(id_index));
            saved_password_data.setText(cursor.getString(pass_index));
    
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (saved_password_data.getVisibility()==View.VISIBLE) {
                        saved_password_data.setVisibility(View.GONE);
                    }else {
                        saved_password_data.setVisibility(View.VISIBLE);
                    }
                    notifyDatasetChanged();
                }
            });
        }
    

    如果您希望第一次保存的密码数据应该可见或消失,而不是根据需要将可见性放​​入 XML 文件中

    【讨论】:

      【解决方案4】:

      在 onItemClick 中添加这个,这里 lBooking.size() 是一个列表大小。

       @Override
              public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
      
                  for(int j=0;j<lBooking.size();j++){
                      if(i == j){
                          view.findViewById(R.id.saved_pwd).setVisibility(View.VISIBLE);
                      }else {
                          lv.getChildAt(j).findViewById(R.id.saved_pwd).setVisibility(View.GONE);
                      }
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 2020-12-06
        • 2014-12-14
        • 2017-11-15
        • 2017-08-04
        • 2017-07-25
        • 2020-07-29
        • 2016-06-24
        相关资源
        最近更新 更多