как справиться с долгим кликом в Android - PullRequest
3 голосов
/ 06 марта 2012

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

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;
                }
            });

    //...
    }
}

Ответы [ 5 ]

6 голосов
/ 06 марта 2012

Для 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 голосов
/ 06 марта 2012

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

Button b = (Button)findViewByID (R.id.button1);
b.setOnLongClickListener(new OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        //to do
    }
});
1 голос
/ 06 марта 2012

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

1 голос
/ 06 марта 2012

Конечно, это довольно просто:

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
    }
}

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

0 голосов
/ 06 марта 2012

Единственный обработчик событий с атрибутом XML - android:onClick.Все остальные обработчики событий регистрируются во время выполнения из кода Java.Технически, даже android:onClick регистрируется во время выполнения из 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);
...