मुझे एक क्लिक करने योग्य अवधि की आवश्यकता होती है ताकि मेरे ऐप में एक सामान्य क्लिक और लंबी क्लिक विधियां हो और मुझे पता चला कि (In Android - How can I register only long clicks using a ClickableSpan) कि मैं LinkMovementMethod क्लास का विस्तार कर सकता हूं और क्लिक करने योग्य एसपीएन क्लास ऐसा करने की अनुमति देने के लिए, लेकिन वर्तमान में लंबे और छोटे क्लिक दोनों काम करते हैं, लेकिन लंबी क्लिक एक्शन को फायर करने के बजाए लंबे क्लिक के लिए जब आइटम को लंबे समय तक दबाया जाता है तो यह तब तक इंतजार करेगा जब तक आप आइटम को आग में नहीं छोड़ देते। यहाँ विस्तारित वर्गों के लिए मेरे कोड है:क्लिक करने योग्य अवधि पर लंबे समय तक क्लिक नहीं किया जाता है जब तक कि क्लिक जारी नहीं किया जाता है
LinkMovementClass
import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.view.MotionEvent;
import android.widget.TextView;
public class LongClickLinkMovementMethod extends LinkMovementMethod {
private Long lastClickTime = 0l;
private int lastX = 0;
private int lastY = 0;
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
lastX = x;
lastY = y;
int deltaX = Math.abs(x-lastX);
int deltaY = Math.abs(y-lastY);
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
LongClickableSpan[] link = buffer.getSpans(off, off, LongClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
if (System.currentTimeMillis() - lastClickTime < 1000)
link[0].onClick(widget);
else if (deltaX < 10 && deltaY < 10)
link[0].onLongClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
lastClickTime = System.currentTimeMillis();
}
return true;
}
}
return super.onTouchEvent(widget, buffer, event);
}
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new LongClickLinkMovementMethod();
return sInstance;
}
private static LongClickLinkMovementMethod sInstance;
}
LongClickableSpanClass
import android.text.style.ClickableSpan;
import android.view.View;
public abstract class LongClickableSpan extends ClickableSpan {
abstract public void onLongClick(View view);
}
वास्तविक क्रियान्वयन
LongClickableSpan eruptionText = new LongClickableSpan() {
@Override
public void onClick(View tvEruptions) {
LinkFunctions.link_eruption_detail(getApplicationContext(),PostErupionID);
}
@Override
public void onLongClick(View tvEruptions) {
if(SignedInUserID != 0) {
DialogFragment newFragment = new Dialogs.QuickActionsDialogFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putLong("eruptionID", PostErupionID);
newFragment.setArguments(args);
newFragment.show(getFragmentManager(), "QuickActions");
}
}
};
ss.setSpan(eruptionText, startpos[(int) j], endpos[(int) j], Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);