Создание контекстного меню после долгого нажатия на элемент ListActivity - PullRequest
0 голосов
/ 26 апреля 2020

я должен создать контекстное меню после долгого нажатия на элемент ListActivity. Вот мой код:

public class DynamicResult extends ListActivity {

    ArrayList<String> myArr = new ArrayList<>();
    ArrayAdapter<String> monthAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                myArr.add("....");
                myArr.add("....");
                myArr.add("....");


         monthAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myArr);
         setListAdapter(monthAdapter);


    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        l.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
             // HERE
                return true;
            }
        });



    }

}

Я прочитал некоторую информацию и создал это:

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        switch (item.getItemId()) {
            case R.id.edit:
                editItem(info.position); 
                return true;
            case R.id.delete:
                deleteItem(info.position);
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

    private void editItem(int position) {
    }

    private void deleteItem(int position) {
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        l.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
////////////////////////////////////////////////////////////////////////////////////////////////


     // How from onItemLongClick turn to onCreateContextMenu so that I have a menu?
    //And what to register in registerForContextMenu ();



////////////////////////////////////////////////////////////////////////////////////////////////

            }


        });

Как и планировалось, я делаю длинный щелчок по элементу списка и открывается контекстное меню Как из onItemLongClick включить OnCreateContextMenu, чтобы у меня было меню? А что прописать в registerForContextMenu ();

1 Ответ

0 голосов
/ 26 апреля 2020

Если ваша деятельность использует ListView или GridView и вы хотите, чтобы каждый элемент предоставлял одно и то же контекстное меню, зарегистрируйте все элементы для контекстного меню, передав ListView или GridView функции registerForContextMenu ().

Таким образом, вы должны использовать так:

monthAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myArr);
setListAdapter(monthAdapter);
registerForContextMenu(getListView());

publi c void openContextMenu (View view)

Программно открывает контекстное меню для конкретный вид. Представление должно быть добавлено через registerForContextMenu (android .view.View).

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long id) {
    openContextMenu(l); // l => your listView
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...