목록보기에서 긴 클릭 이벤트 후 메뉴 생성
모든 항목을 보여주는 데이터베이스에 연결된 목록보기가 있습니다. 사용자가 목록보기 (데이터베이스 항목)에서 항목을 길게 클릭하면 항목을 편집하거나 삭제할 수있는 옵션이 표시된 메뉴가 표시되기를 원합니다. 어떻게 할 수 있습니까?
지금까지 onItemLongClick 리스너와 긴 클릭 한 뷰의 ID를 보여주는 토스트를 사용해 보았습니다.
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
String res = Long.toString(id);
Toast toast = Toast.makeText(this, res, Toast.LENGTH_SHORT);
toast.show();
return true;
}
사용하는 대신 onItemLongClick
사용할 수 있습니다
public void onCreateContextMenu(final ContextMenu menu,
final View v, final ContextMenuInfo menuInfo) {
...
}
편집 및 삭제 또는 필요한 모든 옵션을 설정합니다.
상황에 맞는 메뉴에서 선택한 항목에 대한 작업은 다음에서 처리 할 수 있습니다.
public boolean onContextItemSelected(final MenuItem item)
상황에 맞는 메뉴에 대한 자세한 내용은 여기를 참조 하십시오 .
먼저 목록보기에 컨텍스트 메뉴를 등록해야합니다.
lv = (ListView) findViewById(R.id.list_view);
registerForContextMenu(lv);
그런 다음 활동 메서드를 재정의하십시오.
/**
* MENU
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId()==R.id.list_view) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_list, menu);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()) {
case R.id.add:
// add stuff here
return true;
case R.id.edit:
// edit stuff here
return true;
case R.id.delete:
// remove stuff here
return true;
default:
return super.onContextItemSelected(item);
}
}
다음은 menu_list.xml 파일의 예입니다 (파일을 res / menu 폴더에 넣어야 함).
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add"
android:icon="@android:drawable/ic_menu_add"
android:title="@string/menu_add" />
<item android:id="@+id/edit"
android:icon="@android:drawable/ic_menu_edit"
android:title="@string/menu_edit" />
<item android:id="@+id/delete"
android:icon="@android:drawable/my_icon_delete"
android:title="@string/menu_delete" />
</menu>
도움이되기를 바랍니다.
또 다른 접근 방식 :
//Deleted individual cart items
//on list view cell long press
cartItemList.setOnItemLongClickListener (new OnItemLongClickListener() {
@SuppressWarnings("rawtypes")
public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) {
final CharSequence[] items = { "Delete" };
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Action:");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
cart = cartList.get(position);
db.removeProductFromCart(context, cart);
new AlertDialog.Builder(context)
.setTitle(getString(R.string.success))
.setMessage(getString(R.string.item_removed))
.setPositiveButton("Done", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(CartDetailsActivity.this, HomeScreen.class);
startActivity(intent);
}
})
.show();
}
});
AlertDialog alert = builder.create();
alert.show();
//do your stuff here
return false;
}
});
Activity.openOptionsMenu()
클릭 항목 메서드를 호출 할 수 있습니다.
여기에서 확인하십시오.
http://developer.android.com/reference/android/app/Activity.html#openOptionsMenu%28%29
**
목록보기에 컨텍스트 메뉴를 등록한 후
** 다음과 같이 onCreateContextMenu 메서드를 재정의하십시오.
@Override
public void onCreateContextMenu(ContextMenu menu,View v, ContextMenu.ContextMenuInfo menuInfo){
if (v.getId() == R.id.listView){
AdapterView.AdapterContextMenuInfo info =(AdapterView.AdapterContextMenuInfo)menuInfo;
MenuItem mnu1=menu.add(0,0,0,"Delete");
MenuItem mnu2=menu.add(0,1,1,"Share");
}
}
그런 다음 선택할 수있는 각 항목에 대한 코딩
@Override
public boolean onContextItemSelected(MenuItem menuItem){
AdapterView.AdapterContextMenuInfo info=(AdapterView.AdapterContextMenuInfo)menuItem.getMenuInfo();
switch (menuItem.getItemId()) {
case 0:
Toast.makeText(this, "Delete Selected", Toast.LENGTH_LONG).show();
break;
case 1:
Toast.makeText(this, "Share Selected", Toast.LENGTH_LONG).show();
break;
default:
break;
}
return true;
}
registerForContextMenu (); 사용 컨텍스트 메뉴를 View 후속 작업에 연결합니다.
선택한 ListItem 데이터에 액세스하려면 AdapterView.AdapterContextMenuInfo를 사용하면됩니다. 예 :
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuinfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
long selectid = menuinfo.id; //_id from database in this case
int selectpos = menuinfo.position; //position in the adapter
switch (item.getItemId()) {
case 1:
doSomething(selectid);
break;
case 2:
doSomethingElse(selectpos);
}
return super.onContextItemSelected(item);
}
아직 어려움을 겪고있는 분들을위한 빠른 메모, 두 가지 방법이 있습니다.
registerForContextMenu(list);
unregisterForContextMenu(list);
첫 번째를 선택하십시오.
참고 URL : https://stackoverflow.com/questions/17207366/creating-a-menu-after-a-long-click-event-on-a-list-view
'Nice programing' 카테고리의 다른 글
DateTime에 PHP 타임 스탬프 (0) | 2020.11.03 |
---|---|
다른 함수를 반환하는 함수를 어떻게 작성합니까? (0) | 2020.11.03 |
PHPStorm 또는 POSTman을 사용하는 XDebug 및 RESTful 서버 (0) | 2020.11.03 |
생성 후 Node.js가 ENOMEM 오류를 포착합니다. (0) | 2020.11.03 |
$는 무엇입니까? (0) | 2020.11.03 |