Я видел подобные вопросы здесь в 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;
}
}