অ্যান্ড্রয়েড ক্লিকযোগ্যস্প্যান অনক্লিক কল করছে না


150

আমি একটি ক্লিকযোগ্যস্প্যান তৈরি করছি এবং এটি সঠিক পাঠ্যটিকে আন্ডারলাইন করে সঠিকভাবে প্রদর্শন করছে। তবে ক্লিকগুলি নিবন্ধন করছে না। তুমি কি জান আমি কি ভুল করছি ???

ধন্যবাদ, ভিক্টর

কোড স্নিপেট এখানে:

view.setText("This is a test");
ClickableSpan span = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        log("Clicked");
    }
};
view.getText().setSpan(span, 0, view.getText().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

উত্তর:


430

আপনি কি স্প্যান থাকা টেক্সটভিউতে মুভমেন্টমথোড সেট করার চেষ্টা করেছেন? ক্লিক করার কাজটি করতে আপনার এটি করা দরকার ...

tv.setMovementMethod(LinkMovementMethod.getInstance());

tvএডিট টেক্সট টাইপ হলে ভাল কাজ করবেন না , সত্য আপনি স্প্যানটিতে ক্লিক করতে পারেন তবে এটিকে স্বাভাবিক হিসাবে সম্পাদনা করতে পারবেন না।
FIG-GHD742

অনেক ধন্যবাদ! এটা আমার জন্য কাজ! আপনি কি আমাকে এই সেটিং সম্পর্কে ব্যাখ্যা করতে পারেন?
alfo888_ibg

63
কোর্স অফ দ্য ডকুমেন্টেশনকে ক্লিক হ্যান্ডলারের কাজ করতে আমাকে "তীর কী হ্যান্ডলার" বলে set একদমই সুস্পষ্ট! (╯ ° □ °) ╯︵ ┻━┻
অ্যাডামডপোর্ট

এটি কার্যকর, তবে আমি কখনই বুঝতে পারি না যে এটি ডিফল্ট আচরণ নয়।
এপিকপান্ডাফোরস

এবং গুগল উল্লেখ করতে ভুলে গিয়েছিল যে কল কল সেটমোভমেন্টমথোড "উপবৃত্তিকে" কাজ করে না ... তাই মনে হচ্ছে সঠিক পন্থাটি ম্যানুয়ালি একটি টাচলিস্টেনার প্রয়োগ এবং সেখান থেকে নিয়ে যাওয়া ...
স্লট

4

কিছু পরীক্ষা এবং ত্রুটির পরে, সেটিংসের ক্রমটি গুরুত্বপূর্ণ tv.setMovementMethod(LinkMovementMethod.getInstance());does

এখানে আমার সম্পূর্ণ কোড

String stringTerms = getString(R.string.sign_up_terms);
Spannable spannable = new SpannableString(stringTerms);
int indexTermsStart = stringTerms.indexOf("Terms");
int indexTermsEnd = indexTermsStart + 18;
spannable.setSpan(new UnderlineSpan(), indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(getColor(R.color.theme)), indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Log.d(TAG, "TODO onClick.. Terms and Condition");
    }
}, indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

int indexPolicyStart = stringTerms.indexOf("Privacy");
int indexPolicyEnd = indexPolicyStart + 14;
spannable.setSpan(new UnderlineSpan(), indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(getColor(R.color.theme)), indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Log.d(TAG, "TODO onClick.. Privacy Policy");
    }
}, indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView textViewTerms = (TextView) findViewById(R.id.sign_up_terms_text);
textViewTerms.setText(spannable);
textViewTerms.setClickable(true);
textViewTerms.setMovementMethod(LinkMovementMethod.getInstance());

4

কোটলিন ব্যবহারের ফাংশন:

fun setClickable(textView: TextView, subString: String, handler: () -> Unit, drawUnderline: Boolean = false) {
    val text = textView.text
    val start = text.indexOf(subString)
    val end = start + subString.length

    val span = SpannableString(text)
    span.setSpan(ClickHandler(handler, drawUnderline), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    textView.linksClickable = true
    textView.isClickable = true
    textView.movementMethod = LinkMovementMethod.getInstance()

    textView.text = span
}

class ClickHandler(
        private val handler: () -> Unit,
        private val drawUnderline: Boolean
) : ClickableSpan() {
    override fun onClick(widget: View?) {
        handler()
    }

    override fun updateDrawState(ds: TextPaint?) {
        if (drawUnderline) {
            super.updateDrawState(ds)
        } else {
            ds?.isUnderlineText = false
        }
    }
}

ব্যবহার:

Utils.setClickable(textView, subString, {handleClick()})

1

কোটলিনে সরাসরি পন্থা

  val  textHeadingSpannable = SpannableString(resources.getString(R.string.travel_agent))


           val clickSpan = object : ClickableSpan(){
               override fun onClick(widget: View) {

                // Handel your click
               }
           }
            textHeadingSpannable.setSpan(clickSpan,104,136,Spannable.SPAN_INCLUSIVE_EXCLUSIVE)

            tv_contact_us_inquire_travel_agent.movementMethod = LinkMovementMethod.getInstance()
            tv_contact_us_inquire_travel_agent.text = textHeadingSpannable
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.