2014-01-20 3 views
0

После добавления удаления на деталь длинного клика я попытался добавить опцию вызова таким же образом, но это не сработало.Длинный клик, удаляющий из массиваList

Я написал код здесь во втором поле (первый ящик без изменений параметров вызова, который не работал) и выделил изменения, которые я пробовал с помощью // знаков.

Это код: (я добавлю мои попытки создания длинного удаления щелчка, если вы хотите)

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; 
} 
} 

} }

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; 
    } 

    } 



} 

}

Любой имеет идея, почему это не сработало?

Спасибо

+0

Отметьте это сообщение: http://stackoverflow.com/questions/8846707/how-to-implement-a-long-click-listener-on-a-listview. Внутри вашего onLongClickListener вы можете создать диалог с кнопкой delete на нем, и, поскольку вы уже знаете позицию, которую вы можете удалить из своего arraylist, затем вызовите notifyDataChange на свой адаптер. –

+0

Спасибо, что это работает. Мне также нужен метод для вызова числа, которое вызывается из списка. Могу ли я сделать это с помощью того же метода? Или мне нужно будет создать еще одно мероприятие? – 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(); 
} 

Последняя вещь: Я вижу, вы удаляете из адаптера, но не в списке. Может быть, это и является причиной вашей ошибки?

Смежные вопросы