2014-04-21 8 views
5

Sto imparando da un tutorial online e cerco di implementare alcune funzioni da solo. Come posso visualizzare una finestra di dialogo per avvisare l'utente quando rileva una pressione prolungata sulla voce di elenco? Di seguito è riportato un codice da questo tutorial:Come visualizzare una finestra di dialogo per confermare l'eliminazione quando l'utente preme a lungo sulla voce dell'elenco?

public class FriendList extends ListActivity 
{ 


private static final int ADD_NEW_FRIEND_ID = Menu.FIRST; 

private static final int EXIT_APP_ID = Menu.FIRST + 1; 
private IAppManager imService = null; 
private FriendListAdapter friendAdapter; 

public String ownusername = new String(); 

private class FriendListAdapter extends BaseAdapter 
{  
    class ViewHolder { 
     TextView text; 
     ImageView icon; 
    } 
    private LayoutInflater mInflater; 
    private Bitmap mOnlineIcon; 
    private Bitmap mOfflineIcon;   

    private FriendInfo[] friends = null; 


    public FriendListAdapter(Context context) { // Constructor of Class "FriendListAdapter" 
     super();    

     mInflater = LayoutInflater.from(context); 

     mOnlineIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.greenstar); 
     mOfflineIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.redstar); 

    } 

    public void setFriendList(FriendInfo[] friends) 
    { 
     this.friends = friends; 
    } 


    public int getCount() { // get how many row are in the listview 

     return friends.length; 
    } 


    public FriendInfo getItem(int position) { // get item from the row 

     return friends[position]; 
    } 

    public long getItemId(int position) { 

     return 0; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { // For modify the content of row 
     // A ViewHolder keeps references to children views to avoid unneccessary calls 
     // to findViewById() on each row. 
     ViewHolder holder; 

     // When convertView is not null, we can reuse it directly, there is no need 
     // to reinflate it. We only inflate a new View when the convertView supplied 
     // by ListView is null. 
     if (convertView == null) 
     { 
      convertView = mInflater.inflate(R.layout.friend_list_screen, null); 

      // Creates a ViewHolder and store references to the two children views 
      // we want to bind data to. 
      holder = new ViewHolder(); 
      holder.text = (TextView) convertView.findViewById(R.id.text); 
      holder.icon = (ImageView) convertView.findViewById(R.id.icon);          

      convertView.setTag(holder); 
     } 
     else { 
      // Get the ViewHolder back to get fast access to the TextView 
      // and the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     // Bind the data efficiently with the holder. 
     holder.text.setText(friends[position].userName); 
     holder.icon.setImageBitmap(friends[position].status == STATUS.ONLINE ? mOnlineIcon : mOfflineIcon); 

     return convertView; 
    } 

} 
+0

si dovrebbe usare il menu contestuale per questo ... registrare la voce di lista per menu contestuale – amj

+0

Penso che si sta tentando di fare una cosa molto più complicata di quanto si può. Si dovrebbe iniziare con la sezione di formazione e il sito degli sviluppatori Android. – Valdrinit

risposta

18

utilizzare il codice come:

this.getListView().setLongClickable(true); 
this.getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) { 
    //Do your tasks here 


      AlertDialog.Builder alert = new AlertDialog.Builder(
        Activity.this); 
      alert.setTitle("Alert!!"); 
      alert.setMessage("Are you sure to delete record"); 
      alert.setPositiveButton("YES", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
               //do your work here      
        dialog.dismiss(); 

       } 
      }); 
      alert.setNegativeButton("NO", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 

        dialog.dismiss(); 
       } 
      }); 

      alert.show(); 

    return true; 
    } 
    }); 

È possibile personalizzare finestra di avviso in base alle proprie necessità ...

+0

Grazie! Che esattamente quello che mi serve :) – Chung

+0

sempre benvenuto @Chung –

0

Spero che sia di aiuto:

selectRoom.setOnItemLongClickListener(new OnItemLongClickListener(){ 
    @Override 
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
      int position, long arg3) { 
     // TODO Auto-generated method stub 
     Dialog(); 
} 
} 

o

final MyDialog rDialog=new MyDialog(this,this); 
     return false; 
    } 

}); 

public void Dialog() { 

    AlertDialog.Builder dialogAlert = new AlertDialog.Builder(getApplicationContext()); 
    dialogAlert.setTitle("Demo ?"); 

    dialogAlert.show(); 
} 

//Another way 

public class MyDialog extends Dialog { 

Activity act; 
public ReminderSettingDialog(Context context,Activity act) { 
super(context); 
this.act=act; 
// TODO Auto-generated constructor stub 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.settings); 

} 
} 
+0

grazie per il tuo suggerimento, avevo risolto il mio problema :) – Chung

0

Si dovrebbe fare nella vostra attività con ListView.

ListView myListView; 
myListView = (ListView) findViewById(R.id.my_list_view); 

myListView.setOnLongClickListener(new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 
     //show your dialog 
     //like this 
     CustomDialog dialog = new CustomDialog(); 
     dialog.show(getSupportFragmentManager(), TAG) 
     return false; 
    } 
});