【问题标题】:how to hide textview whose value is null in customadapter如何在customadapter中隐藏值为null的textview
【发布时间】:2016-05-16 10:54:30
【问题描述】:

请告诉我当它有时通过自定义适配器返回空值时如何隐藏文本视图。下面是我的代码。 安卓代码:

public void showList() {
    try {
        JSONObject jsonObj = new JSONObject(myJSON);
        search = jsonObj.getJSONArray(TAG_RESULT);
        for (int i = 0; i < search.length(); i++) {
            JSONObject c = search.getJSONObject(i);
            String title = c.getString(TAG_TITLE);
            String phone = c.getString(TAG_PHONE);
            String email = c.getString(TAG_EMAIL);
            String description = c.getString(TAG_DESCRIPTION);
            String postDate = c.getString(TAG_DATE);
            String username=c.getString(TAG_USERNAME);
            String city=c.getString(TAG_CITY);
            String locality= c.getString(TAG_LOCALITY);
            HashMap<String, String> search = new HashMap<String, String>();

            search.put(TAG_TITLE, title);
            search.put(TAG_PHONE, phone);
            search.put(TAG_EMAIL, email);
            search.put(TAG_DESCRIPTION, description);
            search.put(TAG_DATE, postDate);
            search.put(TAG_USERNAME, username);
            search.put(TAG_CITY, city);
            search.put(TAG_LOCALITY, locality); /* in some case it is null...at that time i want to hide tvlocality textview.*/

            searchList.add(search);


        }



            ListAdapter adapter = new SimpleAdapter(
                    ResultDetail.this, searchList, R.layout.activity_show__result,
                    new String[]{TAG_TITLE, TAG_PHONE, TAG_EMAIL, TAG_DESCRIPTION, TAG_DATE, TAG_USERNAME, TAG_CITY, TAG_LOCALITY},
                    new int[]{R.id.tvTitle, R.id.tvMobile, R.id.tvEmail, R.id.tvDesp, R.id.tvDate, R.id.tvUserName, R.id.tvCityName, R.id.tvLocality}
            );

            listView.setAdapter(adapter);

    } catch (JSONException e) {
        e.printStackTrace();
    }

我在列表视图中显示这个结果。

【问题讨论】:

  • 不喜欢使用它使用自定义适配器,因此您可以轻松修改它!!!!
  • 需要通过扩展SimpleAdapter BaseAdapter来创建自定义Adapter
  • 首先检查 string != null 然后 textview Visibility visible 否则 string 为 null 然后 textView visibility Gone 。

标签: android null custom-adapter


【解决方案1】:

或者简单地覆盖getView(....) 方法,如下例所示

    ListAdapter adapter = new SimpleAdapter(this, searchList, R.layout.your_adapter_view, new String[]{"city"
    }, new int[]{R.id.city}) {
        @Override

        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            ViewHolder holder;
            if (v == null) {
                holder = new ViewHolder();
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.your_adapter_view, null);
                holder.textView = (TextView) v.findViewById(R.id.city);
                //other stuff
                v.setTag(holder);
            } else {
                holder = (ViewHolder) v.getTag();
            }

            Map<String, String> data = searchList.get(position);

            if (!TextUtils.isEmpty(data.get("city"))) {
                holder.textView.setText(data.get("city"));
                holder.textView.setVisibility(View.VISIBLE);
            } else {
                holder.textView.setVisibility(View.GONE);
            }
            //do the same thing for other possible views.
            return v;
        }

        class ViewHolder {
            TextView textView;
            //your other views
        }
    };

对于nullempty check,我更喜欢TextUtils.isEmpty(str)

如果字符串为空或长度为 0,则返回 true。

【讨论】:

    【解决方案2】:

    在适配器中使用下面的代码

     if(textView.getText().toString()==null || textView.getText().toString().isEmpty() ){
        textView.setVisibility(View.GONE);
        }
    else 
    {
            textView.setText(searchList.get(position).get(TAG_TITLE));
    }
    

    【讨论】:

      【解决方案3】:

      您需要创建一个自定义适配器,然后在getView() 方法中,您可以根据您的项目值更改TextView 的可见性。

      public View getView (int position, View convertView, ViewGroup parent){
          //...
          if( yourItem == null ){
              textView.setVisibility(View.INVISIBLE); // or GONE if you want
          } else {
              textView.setVisibility(View.VISIBLE);
          }
          //....
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多