2014-01-20 2 views
0

긴 클릭 부분에서 제거를 추가 한 후 같은 방법으로 호출 옵션을 추가하려고했지만 작동하지 않았습니다.arrayList에서 긴 클릭 제거

두 번째 상자에 코드를 작성하고 (첫 번째 상자는 호출 옵션이 변경되지 않고 작동하지 않음), // 기호로 시도한 변경 사항을 강조 표시했습니다.

코드입니다 :

누구는있다}}

public static final int PICK_CONTACT = 1; 
private ArrayList<String> contactList; 
private ArrayAdapter<String> arrayAdapter; 
    // private ArrayList<Integer> contactList2; 
    // private ArrayAdapter<Integer> arrayAdapter2; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_work__contacts); 

    Button btnPickContact = (Button) findViewById(R.id.btnPickContact); 
    btnPickContact.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View _view) { 
      Intent intent = new Intent(Intent.ACTION_PICK, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT); 
     } 
    }); 

    //you may fill it here e.g. from your db 
    contactList=new ArrayList<String>(); 

    // contactList2=new ArrayList<Integer>(); 

    arrayAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, contactList); 

// arrayAdapter2 = new ArrayAdapter<Integer>(this, 
//   android.R.layout.simple_list_item_1, contactList2); 



    final ListView lv = (ListView) findViewById(R.id.ContactListView); 
    lv.setAdapter(arrayAdapter); 
    lv.setLongClickable(true); 
    lv.setClickable(true); 

    // final ListView lv2 = (ListView) findViewById(R.id.ContactListView); 
    // lv.setAdapter(arrayAdapter2); 
    // lv.setLongClickable(true); 
    // lv.setClickable(true); 

    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int pos, long id) { 
      arrayAdapter.notifyDataSetChanged(); 

      arrayAdapter.remove(arrayAdapter.getItem(pos)); 



      Log.v("long clicked","pos: " + pos); 

      return true; 
     } 
    }); 



    // lv2.setOnItemClickListener(new OnItemClickListener() { 
    // public void onItemClick(AdapterView<?> parent, View view, 
     //  int position, long id) { 
      // 
      //String url = "tel:"+position; 
      // Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url)); 
     // startActivity(intent); 
    //  
     //} 
    //}); 



} 



@SuppressWarnings("deprecation") 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
    case (PICK_CONTACT): { 
     if (resultCode == Activity.RESULT_OK) { 
      Uri contentUri = data.getData(); 
      //Phone Name 
      Cursor c = managedQuery(contentUri, null, null, null, null); 
      c.moveToFirst(); 
      String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
      //Phone Number 
      String contactId = contentUri.getLastPathSegment(); 
      Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, 
        null, Phone._ID + "=?", new String[] { contactId }, 
        null);// < - Note, not CONTACT_ID! 
      startManagingCursor(cursor); 
      Boolean numbersExist = cursor.moveToFirst(); 
      int phoneNumberColumnIndex = cursor 
        .getColumnIndex(Phone.NUMBER); 
      String phoneNumber = ""; 
      // Integer iInteger = new Integer(phoneNumberColumnIndex); 
      while (numbersExist) { 
       phoneNumber = cursor.getString(phoneNumberColumnIndex); 
       phoneNumber = phoneNumber.trim(); 
       numbersExist = cursor.moveToNext(); 

      } 
      stopManagingCursor(cursor); 
      //Set 
      arrayAdapter.add(name + " - " + phoneNumber); 
      arrayAdapter.notifyDataSetChanged(); 
      // arrayAdapter2.add(iInteger); 
      // arrayAdapter2.notifyDataSetChanged(); 



     } 
     break; 
    } 

    } 



} 

public static final int PICK_CONTACT = 1; 
private ArrayList<String> contactList; 
private ArrayAdapter<String> arrayAdapter; 

    @Override 
    public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 
setContentView(R.layout.activity_work__contacts); 

Button btnPickContact = (Button) findViewById(R.id.btnPickContact); 
btnPickContact.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View _view) { 
     Intent intent = new Intent(Intent.ACTION_PICK, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
     startActivityForResult(intent, PICK_CONTACT); 
    } 
}); 

//you may fill it here e.g. from your db 
contactList=new ArrayList<String>(); 

arrayAdapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, contactList); 

final ListView lv = (ListView) findViewById(R.id.ContactListView); 
lv.setAdapter(arrayAdapter); 
    lv.setLongClickable(true); 
     lv.setClickable(true); 

lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int pos, long id) { 
      arrayAdapter.notifyDataSetChanged(); 

      arrayAdapter.remove(arrayAdapter.getItem(pos)); 



} 



    @SuppressWarnings("deprecation") 
    @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 

switch (requestCode) { 
case (PICK_CONTACT): { 
    if (resultCode == Activity.RESULT_OK) { 
     Uri contentUri = data.getData(); 
     //Phone Name 
     Cursor c = managedQuery(contentUri, null, null, null, null); 
     c.moveToFirst(); 
     String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
     //Phone Number 
     String contactId = contentUri.getLastPathSegment(); 
     Cursor cursor = getContentResolver().query(Phone.CONTENT_URI, 
       null, Phone._ID + "=?", new String[] { contactId }, 
       null);// < - Note, not CONTACT_ID! 
     startManagingCursor(cursor); 
     Boolean numbersExist = cursor.moveToFirst(); 
     int phoneNumberColumnIndex = cursor 
       .getColumnIndex(Phone.NUMBER); 
     String phoneNumber = ""; 
     while (numbersExist) { 
      phoneNumber = cursor.getString(phoneNumberColumnIndex); 
      phoneNumber = phoneNumber.trim(); 
      numbersExist = cursor.moveToNext(); 
     } 
     stopManagingCursor(cursor); 
     //Set 
     arrayAdapter.add(name + "-" + phoneNumber); 
     arrayAdapter.notifyDataSetChanged(); 
    } 
    break; 
} 
} 

} 을 (당신이 원한다면 내가 긴 클릭 제거를 만드는 나의 시도를 추가합니다) 왜 작동하지 않는지?

+0

이 게시물 확인 : http://stackoverflow.com/questions/8846707/how-to-implement-a-long-click-listener-on-a-listview. onLongClickListener 안에는 삭제 버튼이있는 대화 상자를 만들 수 있으며, 이미 위치를 알고 있기 때문에 arraylist에서 제거 할 수 있습니다. 그런 다음 어댑터에서 notifyDataChange를 호출하십시오. –

+0

고맙습니다. 또한 listview에서 클릭 한 번호로 전화를 걸려면 메서드가 필요합니다. 동일한 방법으로이 작업을 수행 할 수 있습니까? 다른 활동을 만들어야합니까? – Noam

+0

길게 누르거나 보통 클릭에 따라 listView.onItemClickListener()를 설정 한 다음 위치 번호 ( –

답변

0

난 당신이 이미 한 것처럼 가장 좋은 방법은 implement a long click listener에 생각 감사드립니다.

그런 다음 사용자가 확인하도록 메시지 대화 상자를 표시하는 것이 좋습니다. 이 방법을 알려 드리겠습니다.

private AlertDialog showCustomDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo, final int selectedIndex) { 
    AlertDialog.Builder customDialog = new AlertDialog.Builder(act); 
    customDialog.setTitle(title); 
    customDialog.setMessage(message); 
    customDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialogInterface, int i) { 
      picURL.remove(selectedIndex); 
     } 
    }); 
    customDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialogInterface, int i) { 
     } 
    }); 
    return customDialog.show(); 
} 

마지막 사항 : 어댑터에서 제거하고 있지만 목록에 없습니다. 어쩌면 이것이 당신의 실수를 일으키는 원인일까요?