2012-03-06 3 views
3

Я новичок в Android-разработчике. То, как я обрабатывал клики, - это установить атрибут в файле манифеста для кнопок. Мне интересно, как лучше всего обрабатывать длинные клики в целом. Я прочитал о внедрении onLongClick(), но есть ли способ использовать обработчики (как и выше), вместо того, чтобы расширять представление? Это было бы очень полезно, так как мне бы не пришлось перестраивать весь проект с расширенным классом View.как обращаться с длинным кликом в Android

EDIT

я должен уточнить. У меня есть ListView, и я хочу установить, что произойдет, когда я нажму на элемент в списке. Каждый элемент в списке - TextView. Согласно одному из ответов, я добавил код, приведенный ниже, и теперь я получаю силу близко:

public class TwitterActivity extends ListActivity { 
    List<String> tweets = new LinkedList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setListAdapter(new ArrayAdapter<String>(this, R.layout.layout, tweets)); 

      TextView view = (TextView) findViewById(R.id.ListTemplate); 
      view.setOnLongClickListener(new OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        Toast toast = new Toast(TwitterActivity.this); 
        toast.setText("LongClick"); 
        toast.show(); 

        return true; 
       } 
      }); 

    //... 
    } 
} 
+0

Проверьте обновленный ответ, который используется для ListActivity. –

ответ

6

Для ListActivity, если вы хотите, чтобы ответить на длинные клики по элементам списка сделать это:

public class TwitterActivity extends ListActivity { 
    List<String> tweets = new LinkedList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setListAdapter(new ArrayAdapter<String>(this, R.layout.layout, tweets)); 
      ListView lv = getListView(); 
      lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ 
        @Override 
        public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) 
        { 
         Toast.makeText(TwitterActivity.this, "LongClick", Toast.LENGTH_LONG).show(); 
        } 
      }); 

    } 
} 

Для регулярной деятельности вы мог бы сделать что-то вроде этого:

public class MyActivity extends Activity implements View.onLongClickListener { 

    View myView = null; 


    public void onCreate(Bundle state) { 
     super.onCreate(state); 
     setContentView(R.layout.my_activity); 
     myView = findViewById(r.id.my_view); 
     myView.setOnLongClickListener(this); 
    } 

    @Override 
    public void onLongClick(View v) { 
    //long clicked 
    } 

} 
2

получить ручку на кнопку с помощью findViewByID, а затем вызвать setOnLongClickListener.

Button b = (Button)findViewByID (R.id.button1); 
b.setOnLongClickListener(new OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     //to do 
    } 
}); 
+0

Я пробовал это, но это не сработало. Я использую ListView и каждый элемент List как TextView. Мой код находится в редакции выше. – ewok

+0

Я вижу, что вы используете R.layout.layout, что выглядит неправильно. Вы должны указать идентификатор используемого TextView (который должен находиться в файле R.id.) – jsimpson

+0

Закрытие останова, даже когда я перехожу на 'R.id.ListTemplate' – ewok

0

Единственный обработчик события, который имеет атрибут XML является . Все остальные обработчики событий регистрируются во время выполнения из кода Java. Технически даже зарегистрирован во время выполнения из Java-кода, но вам не нужно писать соответствующий Java-код.

Так что вам нужно сделать что-то вроде этого:

View.OnLongClickListenerhandler = View.OnLongClickListener() { 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.myButton: // doStuff 
       break; 
      case R.id.myOtherButton: // doStuff 
       break; 
     } 
    } 
} 

findViewById(R.id.myButton).setOnLongClickListener(handler); 
findViewById(R.id.myOtherButton).setOnLongClickListener(handler); 
1

Уверенный, это довольно просто:

ImageButton i = (ImageButton) findViewById(R.id.myButton); 
i.setOnLongClickListener(new myLongListener()); 

private class myLongListener implements View.OnLongClickListener { 
    @Override 
    public void onClick(View v) { 
     //your code here 
    } 
} 

надеюсь, что это поможет!

1

В большинстве случаев нет необходимости удлинять класс View. View имеет метод, называемый setOnLongClickListener, который вы можете использовать напрямую, поскольку все производные классы, такие как Button или TextView, и т. Д. Также будут иметь.

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