티스토리 뷰

728x90



이번 포스팅에서는 지난 포스팅에 이어  ListView item click 시 menu 가 나오게 하는 방법 중 popup menu 를 이용하는 방법에 대해 알아보자.

 



참고로, 지난 포스팅에서는 ListView 에 text + image 목록 출력, click 처리, menu 출력 하는 방법에 대해 알아 보았다.

[Android/UI] - ListView (2) - ListView 에 text 출력하기

[Android/UI] - ListView (3) - ListView 에 image 추가하기

[Android/UI] - ListView (4) - ListView item 의 click 처리하기

[Android/UI] - ListView (5) - ListView item click 시 context menu 출력하기



Menu XML resource file 추가

ListView item long click 시 나올 popup menu 를 XML 로 추가하자.

1. 하단 그림과 같이 res 폴더 안에 'menu' 라는 이름으로 폴더를 추가

2. 'main_list_menu.xml' 를 하단과 같이 생성

3. 1번에서 생성한 menu 폴더에 'main_list_menu.xml' 파일을 추가한다.

 

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_insert"
android:title="@string/insert" />
<item android:id="@+id/action_delete"
android:title="@string/delete" />
<item android:id="@+id/action_modify"
android:title="@string/modify" />
<item android:id="@+id/action_info"
android:title="@string/info" />
</menu>

 



ListView item long click 시 popup menu 출력

새로 생성한 'main_list_menu.xml' 는 popup menu 생성 시 등록하자.

1. onItemLockClick 시 popup menu 생성 (xml inflate)

2. Popup menu click 시 click event 처리

3. Popup menu 보이기 (꼭 show 를 해야한다.)

 

public class PhMainActivity extends AppCompatActivity {
......
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindList();
}
private void bindList() {
......
mCountryAdapter = new PhCountryArrayAdapter(this, mItemList);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(mCountryAdapter);
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> a_parent, View a_view, final int a_position, long a_id) {
// Popup menu 생성
PopupMenu popup = new PopupMenu(PhMainActivity.this, a_view);
getMenuInflater().inflate(R.menu.main_list_menu, popup.getMenu());
// Popup menu click event 처리
popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem a_item) {
final PhCountryItem item = (PhCountryItem) mCountryAdapter.getItem(a_position);
switch (a_item.getItemId()) {
case R.id.action_insert:
Toast.makeText(PhMainActivity.this, item.getCountry() + " " + getString(R.string.insert), Toast.LENGTH_SHORT).show();
break;
case R.id.action_delete:
Toast.makeText(PhMainActivity.this, item.getCountry() + " " + getString(R.string.delete), Toast.LENGTH_SHORT).show();
break;
case R.id.action_modify:
Toast.makeText(PhMainActivity.this, item.getCountry() + " " + getString(R.string.modify), Toast.LENGTH_SHORT).show();
break;
case R.id.action_info:
Toast.makeText(PhMainActivity.this, item.getCountry() + " " + getString(R.string.info), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return false;
}
});
// Popup 보이기
popup.show();
return true;
}
});
}
}



Source code

https://github.com/parkho79/ListView_5



728x90
댓글