【问题标题】:Android: Make visible to particular widgets in the row of ListView on Click of Clickable spanAndroid:在 Clickable span 的 Click 上使 ListView 行中的特定小部件可见
【发布时间】:2016-08-11 12:35:51
【问题描述】:

这里我有几个小部件在ListView 的一行中。

我需要获取小部件的正确位置并管理它们在适配器内的可见性。目前它对last itemlast item 可见。

我在这里也使用getTag()setTag(),但没有成功。

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) activity
                .getSystemService(activity.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.clist_item, null);
        holder = new ViewHolder();
holder.requestion_layout = (RelativeLayout) convertView.findViewById(R.id.requestion_layout);
holder.submitAnswerBtn = (RelativeLayout) convertView.findViewById(R.id.submit_answer_btn);
holder.questionTitle = (TextView) convertView.findViewById(R.id.question_title);
 //these are the widgets 
    holder.requestion_layout.setTag(position);
    holder.submitAnswerBtn.setTag(position);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }


//trying to change visibility on click of Clickable Span 
 Spannable main_words = new SpannableString(items.get(position).getAnswer() + "");
        int color1 = ContextCompat.getColor(activity, R.color.light_black);
        main_words.setSpan(new ForegroundColorSpan(color1), 0, main_words.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        int color2 = ContextCompat.getColor(activity, R.color.tab_green);
        Spannable wordTwo = new SpannableString("Reply");
        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                //Toast.makeText(DummyActivity.this, "Click", Toast.LENGTH_LONG).show();
           Integer position_clicked = (Integer) v.getTag();
           //Widgets are not getting their positions here
                holder.requestion_layout.setVisibility(View.VISIBLE);
                holder.submitAnswerBtn.setVisibility(View.VISIBLE);
            }
        };
        wordTwo.setSpan(clickableSpan, 0, wordTwo.toString().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        wordTwo.setSpan(new ForegroundColorSpan(color2), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        wordTwo.setSpan(new StyleSpan(Typeface.ITALIC), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        CharSequence concat = TextUtils.concat(main_words, " ", wordTwo);
        holder.answerValue.setText(concat);
        holder.answerValue.setMovementMethod(LinkMovementMethod.getInstance());
        holder.answerValue.setHighlightColor(Color.TRANSPARENT);
        holder.answerValue.setVisibility(View.VISIBLE);
        holder.answerTitle.setVisibility(View.VISIBLE);
return convertView;
 }

【问题讨论】:

    标签: android listview


    【解决方案1】:

    对于这个问题,您必须使用arrayList 并在此处设置一个标记,位置为

    //Define arraylist globally
     private List<Boolean> requestionVisibleState;
    
    //set a default value in constructor of adapter
     this.requestionVisibleState = new ArrayList<>(Arrays.asList(new Boolean[getCount()]));
        Collections.fill(this.requestionVisibleState, false);
    
    //In getView after completing if else statement
     if (requestionVisibleState.get(position)) {
            holder.submitAnswerBtn.setVisibility(View.VISIBLE);
            holder.requestion_layout.setVisibility(View.VISIBLE);
        }
    //And in `onClick` of your ClicableSpan
                        if (requestionVisibleState.get(position)) {
                            requestionVisibleState.set(position, false);
                        } else {
                            requestionVisibleState.set(position, true);
                        }
                        notifyDataSetChanged();
    

    我希望它对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-07
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2021-09-21
      相关资源
      最近更新 更多