2012-07-02 3 views
1

Я работаю с achartengine, и я хочу активировать Action Mode в Action Bar, когда я долго нажимаю на диаграмму. Но OnLongClickListener не работает, я искал везде, где я пытался почти все, но я не могу заставить его работать, и я не знаю, почему. Вот мой код:OnLongClickListener не работает с achartengine

mChartView.setLongClickable(true); 
mChartView.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      Log.i("ClickListener", "CLICK"); 
      return false; 
     } 

}); 

Но событие не вызывается, я думаю, это потому, что диаграмма прокручивать, но не имеет смысла. Я пробовал whit OnClick, а также не работает. Единственное, что работает, это OnTouch, но я не могу получить поведение Long-Press.

EDIT:

Или, может быть, есть какой-нибудь способ получить фактическое состояние состояние сенсорного экрана, на этом пути, я могу поставить «таймер», пока он не достигнет, например 1000мс, но только в то время как сенсорный экран коснулся, потому что внутри события onTouch я могу знать состояние сенсорного экрана при событии, независимо от текущего состояния.

Ok, вот некоторый код для линейного графика:

private static XYSeries input1; 
private static XYMultipleSeriesDataset mDataset; 
private static XYSeriesRenderer renderer1; 
private static XYMultipleSeriesRenderer mRenderer; 
private static GraphicalView mChartView; 

mRenderer = new XYMultipleSeriesRenderer(); 
     renderer1 = new XYSeriesRenderer(); 

     mRenderer.setOrientation(Orientation.HORIZONTAL); 
     mRenderer.addSeriesRenderer(renderer1); 
     mRenderer.setXAxisMax(10); 
     mRenderer.setYAxisMax(10); 
     mRenderer.setAxesColor(Color.WHITE); 
     mRenderer.setLabelsColor(Color.WHITE); 
     mRenderer.setShowGrid(true); 

     input1 = new XYSeries("Linea"); 

     mDataset = new XYMultipleSeriesDataset(); 
     mDataset.addSeries(input1); 

     renderer1.setColor(Color.WHITE); 

     input1.add(4, 7); 
     input1.add(7, 3); 
     input1.add(8, 6); 
     input1.add(9, 2); 

     mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer); 
     setContentView(mChartView); 

     mChartView.setLongClickable(true); 
     mChartView.setOnLongClickListener(new OnLongClickListener() { 

      @Override 
      public boolean onLongClick(View v) { 
       Log.i("Click", "LONG CLICKED CHART"); 
       return false; 
      } 

     }); 

Я пытаюсь сделать Long-Click с onTouch, потому что я понял, что если я скольжу график будет taked, как Long-Click также , поэтому я должен взять длинный клик, НО, если я не сдвигу график.

+0

У вас также есть onTouchListener, установленный на том же представлении? если вы так можете опубликовать код для этого? – FoamyGuy

+0

Нет, у меня есть только OnLongClickListener. – Andres

ответ

2

Вы можете использовать работоспособный в сочетании с onTouchListener(), чтобы получить тот же эффект, как onLongClick(). Что-то вроде этого должно это сделать:

boolean fingerStillDown = false; 
final Runnable longClickRun = new Runnable(){ 
    public void run(){ 
     if(fingerStillDown){ 
      Log.i("CHARTS!", "LONGCLICK!"); 
     } 
    } 
}; 
mChartView.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent me){ 
     if(me.getAction() == MotionEvent.ACTION_DOWN){ 
       fingerStillDown = true; 
       //The system registers longclick at ~500ms. 
       mChartView.postDelayed(longClickRun, 500); 
     } 

     if(me.getAction() == MotionEvent.ACTION_UP){ 
      fingerStillDown = false; 
     } 


     return false; //<-- I didn't test with true, but I suspect returning true 
         // would break the scrolling. 
     } 
    }); 
+0

Работает ли она на линейной диаграмме, где вы можете ее прокручивать? – Andres

+0

Я создал новую активность с простой линейной диаграммой и не работает:/ – Andres

+0

Хм, можете ли вы опубликовать какой-нибудь рабочий код, который будет создавать линейную диаграмму? Я не согласен с aChartEngine, и у меня возникают проблемы с созданием линейной диаграммы прямо сейчас. Я думаю, ваш лучший выбор - использовать touchListener с таймером, как вы сказали в своем Редактировании. Если вы разместите какой-либо код рабочей строки, я могу помочь вам правильно реализовать touchListener. – FoamyGuy

0

Попробуйте return true вместо false. Таким образом, элемент был долго нажат, поэтому обработчик был обработан.

mChartView.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      Log.i("ClickListener", "CLICK"); 
      return true; 
     } 

}); 
+0

Я думаю, что он все равно будет видеть заявление журнала, если это его проблема. – FoamyGuy

+0

Да, и это не работает:/ – Andres

+0

Взгляните на [это] (http://stackoverflow.com/a/7725994/828728), я думаю, что это может помочь. Вы можете проверить официальный образец [здесь] (http://code.google.com/p/achartengine/source/browse/trunk/achartengine/demo/org/achartengine/chartdemo/demo/chart/XYChartBuilder.java?r= 367). – yugidroid

Смежные вопросы