как связать контекстное меню с элементами списка. АНДРОИД СТУДИЯ - PullRequest
0 голосов
/ 11 октября 2019

Я видел подобные вопросы здесь в stackOVERFLOW и других веб-сайтах, но я не нашел решения своей проблемы. (Поэтому не отмечайте как дубликат).

У меня есть listView, который отображает несколько элементовна экран, и что я хотел бы сделать, это всплывающее контекстное меню, когда я долго нажимал на элемент в списке.

ЛЮБАЯ ИДЕЯ, ПОЧЕМУ Я НЕ МОГУ СДЕЛАТЬ КОНТЕКСТНОЕ МЕНЮ, ЧТОБЫ ПОДКЛЮЧИТЬСЯ КПУНКТЫ LISTVIEW?

package edu.utep.cs.cs4330.mypricewatcher;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    /**creates averything on the screen when the activity is created*/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = findViewById(R.id.listView);
        Item item = new Item("The second ship book", "https://www.amazon.com/Second-Ship-Rho-Agenda/dp/1612184936?ref_=Oct_DLandingS_PC_a3453e12_25&smid=ATVPDKIKX0DER",20.00,0.0,0.0);
        Item item1 = new Item("The second ship book", "https://www.amazon.com/Second-Ship-Rho-Agenda/dp/1612184936?ref_=Oct_DLandingS_PC_a3453e12_25&smid=ATVPDKIKX0DER",20.00,0.0,0.0);
        Item item3 = new Item("The second ship book", "https://www.amazon.com/Second-Ship-Rho-Agenda/dp/1612184936?ref_=Oct_DLandingS_PC_a3453e12_25&smid=ATVPDKIKX0DER",20.00,0.0,0.0);

        ArrayList<Item> itemsList = new ArrayList<>();
        itemsList.add(item);
        itemsList.add(item1);
        itemsList.add(item3);

        //array adapter
        ItemsListAdapter adapter = new ItemsListAdapter(this,R.layout.adapter_view_layout,itemsList);
        listView.setAdapter(adapter);



/*****************************************************************************/
//I saw this options to link the context menu to listView but none of them work


        listView.setOnCreateContextMenuListener(this);

        //registerForContextMenu(listView);
/*****************************************************************************/


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

    private void createMenu(ContextMenu menu) {
        MenuItem mnu1 = menu.add(0, 0, 0, "Item 1");
        {
            mnu1.setAlphabeticShortcut('a');
        }
        MenuItem mnu2 = menu.add(0, 1, 1, "Item 2");
        {
            mnu2.setAlphabeticShortcut('b');
        }
        MenuItem mnu3 = menu.add(0, 2, 2, "Item 3");
        {
            mnu3.setAlphabeticShortcut('c');
        }
        MenuItem mnu4 = menu.add(0, 3, 3, "Item 4");
        {
            mnu4.setAlphabeticShortcut('d');
        }
        menu.add(0, 4, 4, "Item 5");
        menu.add(0, 5, 5, "Item 6");
        menu.add(0, 6, 6, "Item 7");
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        return MenuChoice(item);
    }

    private boolean MenuChoice(MenuItem item) {
        switch (item.getItemId()) {
            case 0:
                Toast.makeText(this, "You clicked on Item 1",
                        Toast.LENGTH_LONG).show();
                return true;
            case 1:
                Toast.makeText(this, "You clicked on Item 2",
                        Toast.LENGTH_LONG).show();
                return true;
            case 2:
                Toast.makeText(this, "You clicked on Item 3",
                        Toast.LENGTH_LONG).show();
                return true;
            case 3:
                Toast.makeText(this, "You clicked on Item 4",
                        Toast.LENGTH_LONG).show();
                return true;
            case 4:
                Toast.makeText(this, "You clicked on Item 5",
                        Toast.LENGTH_LONG).show();
                return true;
            case 5:
                Toast.makeText(this, "You clicked on Item 6",
                        Toast.LENGTH_LONG).show();
                return true;
            case 6:
                Toast.makeText(this, "You clicked on Item 7",
                        Toast.LENGTH_LONG).show();
                return true;
        }
        return false;
    }
}

АДАПТЕР

package edu.utep.cs.cs4330.mypricewatcher2;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;

public class ItemsListAdapter extends ArrayAdapter<Item> {
    private Context nContext;
    int nResource;

    /**
     * default constructor for the itemslistadapter*/
    public ItemsListAdapter(@NonNull Context context, int resource, @NonNull ArrayList<Item> objects) {
        super(context, resource, objects);
        nContext = context;
        nResource = resource;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        String name = getItem(position).getName();
        String url = getItem(position).getUrl();
        double initialPrice = getItem(position).getInitialPrice();
        double currentPrice = getItem(position).getCurrentPrice();
        double priceChange = getItem(position).getPriceChange();

        Item item = new Item(name, url, initialPrice, currentPrice, priceChange);

        LayoutInflater layoutInflater = LayoutInflater.from(nContext);
        convertView = layoutInflater.inflate(nResource, parent, false);


        TextView itemName = (TextView) convertView.findViewById(R.id.textViewName);
        itemName.setText("Name :                " + name);

        TextView itemUrl = (TextView) convertView.findViewById(R.id.textViewUrl);
        itemUrl.setText("Url :                      " + url);

        TextView itemInitialPrice = (TextView) convertView.findViewById(R.id.textViewInitialPrice);
        itemInitialPrice.setText("Initial Price :      $ " + Double.toString(initialPrice));

        TextView itemCurrentPrice = (TextView) convertView.findViewById(R.id.textViewCurrentPrice);
        itemCurrentPrice.setText("Current Price :   $ " + Double.toString(currentPrice));

        TextView itemPriceChange = (TextView) convertView.findViewById(R.id.textViewPriceChange);
        itemPriceChange.setText("Price Change :  % " + Double.toString(priceChange));


        return convertView;
    }
}
...