我不确定我尝试做的事情是否有任何意义,但我会试一试: 我的手机充当客户端,我需要将有关运动事件的数据发送到服务器。 我正在处理与AsyncTask的通信,所以我想在我的AsyncTask类中实现onTouch方法。 我让我的AsyncTask实现了View.OnTouchListener,但事件并没有真正进入我的AsyncTask中的onTouch方法。 我猜我错过了一些非常基本的东西......
这是AsyncTask代码:
.tooltip {
display: inline-block;
position: fixed;
padding: .5em 1em;
background-color: #f1f1f1;
}
由于
编辑,已解决:
正如许多在此发表评论的人所说,我必须将onTouch实现附加到特定视图。
所以,因为我需要我的onTouch事件来包含所有屏幕的大小,我只是创建了一个相对布局的对象并将其传递给我的asyncTask(实现OnTouchListener)的构造函数,并在我设置的构造函数<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h4 id="log">pageX: -, pageY: -</h4>
<div class="tooltip">I'm a tooltip!</div>
上。
这就是诀窍 - 当我触摸屏幕时,现在会调用asyncTask中的onTouch方法。
非常感谢大家。
答案 0 :(得分:1)
有一点缺乏信息。您是否正确使用
将asyncTask作为onTouchListener放在视图上view.setOnTouchListener(yourAsyncTask);
请注意,yourAsyncTask对象必须完全是正在运行的对象(而不是新的或匿名的实例)。因此,我建议您在开始运行asyncTask时添加侦听器。
如果您已经这样做了,我建议您发布更多信息(您的活动代码,asyncTask启动和setOnTouchListener部分)。
编辑: 代码示例:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View viewToTouchWithReact=findViewById(R.id.yourViewId);
AsyncTask task=/**.AsynTask creation and launch.**/
viewToTouchWithReact.setOnTouchListener(task);
}
做那样的事。如果没有代码启动asyncTask和活动代码,我就无法更精确。遗憾
答案 1 :(得分:1)
无法访问代码,因为AsyncTask不是用户可以“触摸”的UI元素。您应该将侦听器添加到视图,然后启动异步任务:
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent motionEvent) {
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
{
tpAsyncTask<String,String,String> task = new tpAsyncTask<>();
task.execute(motionEvent);
Log.d(TAG, "ACTION MOVE IS PREFORMED");
}
case MotionEvent.ACTION_DOWN:
{
Log.d(TAG, "ACTION DOWN IS PREFORMED");
}
}
return false;
}
});
答案 2 :(得分:1)
我认为你的对象关系有点内而外。不要让AsyncTask
拥有OnTouchListener
,而是让OnTouchListener
(在UI线程中始终调用)触发AsyncTask
。
如果您的AsyncTask
在完成后更新了用户界面,那么您需要跟踪正在运行的AsyncTask
,以便在活动暂停时取消它们。否则,你可能会AsyncTask
点火而忘记。 (创建它,执行它,让它超出范围。)