마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

커스텀리스트뷰 롱클릭리스너로 삭제가 안돼요

0 추천
public class PlusActivity extends Activity {
    private ListView mListView = null;
    private ListViewAdapter mAdapter = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_plus);

        mListView = (ListView) findViewById(R.id.mList);

        mAdapter = new ListViewAdapter(this);
        mListView.setAdapter(mAdapter);

        mAdapter.addItem(null,
                "이름",
                "직업");

        mListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                AddListView mData = mAdapter.mListData.get(position);
                Toast.makeText(PlusActivity.this, mData.mTitle, Toast.LENGTH_SHORT).show();
            }
        });
    }

    public void onBtnAddClick( View v )
    {
        Intent intent = new Intent(this, AddActivity.class);

        startActivity(intent);

        int REQUEST_CODE = 1;

        startActivityForResult(intent, REQUEST_CODE);
    }

    private class ViewHolder {
        public ImageView mIcon;

        public TextView mText;

        public TextView mDate;
    }

    private class ListViewAdapter extends BaseAdapter {
        private Context mContext = null;
        private ArrayList<AddListView> mListData = new ArrayList<AddListView>();

        public ListViewAdapter(Context mContext) {
            super();
            this.mContext = mContext;
        }

        @Override
        public int getCount() {
            return mListData.size();
        }

        @Override
        public Object getItem(int position) {
            return mListData.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        public void addItem(Drawable icon, String mTitle, String mDate){
            AddListView addInfo = null;
            addInfo = new AddListView();
            addInfo.mIcon = icon;
            addInfo.mTitle = mTitle;
            addInfo.mDate = mDate;

            mListData.add(addInfo);
        }

        public void remove(int position){
            mListData.remove(position);
            dataChange();
        }

        public void sort(){
            Collections.sort(mListData, AddListView.ALPHA_COMPARATOR);
            dataChange();
        }

        public void dataChange(){
            mAdapter.notifyDataSetChanged();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                holder = new ViewHolder();

                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.addlist_item, null);

                holder.mIcon = (ImageView) convertView.findViewById(R.id.mImage);
                holder.mText = (TextView) convertView.findViewById(R.id.mText);
                holder.mDate = (TextView) convertView.findViewById(R.id.mDate);

                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }

            AddListView mData = mListData.get(position);

            if (mData.mIcon != null) {
                holder.mIcon.setVisibility(View.VISIBLE);
                holder.mIcon.setImageDrawable(mData.mIcon);
            }else{
                holder.mIcon.setVisibility(View.GONE);
            }

            holder.mText.setText(mData.mTitle);
            holder.mDate.setText(mData.mDate);

            return convertView;
        }

        // Long click된 item의 index를 기록
        int selectedPos = -1;

        // ListView의 item을 길게 클릭
        private class ListViewItemLongClickListener implements AdapterView.OnItemLongClickListener
        {

            @Override

            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
            {
                selectedPos = position;
                AlertDialog.Builder alertDlg = new AlertDialog.Builder(view.getContext());
                alertDlg.setTitle(R.string.alert_title_question);

                // '예' 버튼 클릭
                alertDlg.setNegativeButton( R.string.button_yes, new DialogInterface.OnClickListener()
                {

                    @Override

                    public void onClick( DialogInterface dialog, int which )
                    {
                        mListData.remove(selectedPos);

                        // method를 호출하지 않을 경우
                        mAdapter.notifyDataSetChanged();

                        // AlertDialog를 종료
                        dialog.dismiss();
                    }
                });

                // '아니오' 버튼 클릭
                alertDlg.setPositiveButton( R.string.button_no, new DialogInterface.OnClickListener()
                {

                    @Override

                    public void onClick( DialogInterface dialog, int which ) {

                        // AlertDialog를 닫는다.
                        dialog.dismiss();
                    }
                });

                alertDlg.setMessage(String.format(getString(R.string.alert_msg_delete), mListData.get(position)));
                alertDlg.show();
                return false;
            }

        }
    }
}

 

iks1681 (280 포인트) 님이 2016년 10월 14일 질문

1개의 답변

0 추천
아무리 봐도  ListView에 AdapterView.OnItemLongClickListener를 할당하는 부분이 없는데요. 일단 해당 이벤트 리스너부터 할당해 보시죠.
spark (227,530 포인트) 님이 2016년 10월 14일 답변
...