问题
Hi,
I'm working on a simple file browser app. I have most of it set up (where it lists everything out in the different directories and what not) but what I'm stuck on right now (worked on it for a few hours) is when a list item is selected, I want to have a custom list dialog appear. I found this code on the android development page and modded it slightly. Currently it just gives a toast of what was selected but I need the three items to be separate. That is, I'd like to do more than a toast and have each selection run different commands. Here is my current code
final CharSequence[] items = {"Info", "Rename", "Delete"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Options for " + file.getName());
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
}).show();
Thanks to anyone who can help me just separate it. I've tried a few different variations of if statements and what not but everything I've tried has failed.
回答1:
The item integer you receive is the index of the charsequence array that contains your actions, so to get the action that was selected you could do like this (inside your onClick method):
if (item == 0)
{
// Info item
}
else if (item == 1)
{
// Rename, and so one
Or you could do like this:
if (items[item].equals("Info"))
{
// Info item
}
else if (items[item].equals("Rename")
{
// Rename, and so one
}
But the first method is prefered
回答2:
A little late but this may help. I'm using it to populate a custom list in a dialog. I'm using a cursor but you can also use a ArrayAdapter or whatever suits your fancy:
Dialog aDialog = new Dialog(this);
AlertDialog.Builder bDialog = new AlertDialog.Builder(this);
Cursor books = managedQuery(booksprovider.CONTENT_URI_BOOKS, null, null, null, null);
ListView booksToAdd = new ListView(this);
SimpleCursorAdapter books_list = new SimpleCursorAdapter(this, R.layout.shelves_add, books,
new String[] { BOOKS_TITLE, BOOKS_AUTHOR },//columns to include in view
new int[] { R.id.search_results_title, R.id.search_results_author } );//views to bind columns to
booksToAdd.setAdapter(books_list);
bDialog.setView(booksToAdd);
bDialog.setPositiveButton("Add to Shelf", new DialogInterface.OnClickListener() { });
aDialog = bDialog.create();
回答3:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
String[] name = new String[] {"item1","item2"};
builder.setItems(name, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case 0:
//click item 1
break;
case 1:
//click item 2
break;
}
}
});
builder.show();
回答4:
and call in that dialog which u want to open a single select dialog.. FragmentManager manager = getFragmentManager();
/** Instantiating the DialogFragment class */
AddTimerDialog alert = new AddTimerDialog();
alert.setPositiveClickListener(this);
/** Creating a bundle object to store the selected item's index */
Bundle b = new Bundle();
/** Storing the selected item's index in the bundle object */
b.putInt("position", position);
/** Setting the bundle object to the dialog fragment object */
alert.setArguments(b);
/** Creating the dialog fragment object, which will in turn open the alert dialog window */
alert.show(manager, "alert_dialog_radio");
回答5:
I am calling Dialog box in Dialog here is my code..
Try This :
public class AddTimerDialog extends DialogFragment {
AlertPositiveListener alertPositiveListener;
interface AlertPositiveListener {
public void onPositiveClick(int position);
}
public void setPositiveClickListener(
AlertPositiveListener alertPositiveListener) {
this.alertPositiveListener = alertPositiveListener;
}
OnClickListener positiveListener = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AlertDialog alert = (AlertDialog) dialog;
int position = alert.getListView().getCheckedItemPosition();
if (alertPositiveListener != null)
alertPositiveListener.onPositiveClick(position);
}
};
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle bundle = getArguments();
int position = bundle.getInt("position");
AlertDialog.Builder b = new AlertDialog.Builder(getActivity());
b.setSingleChoiceItems(ReminderSnooze.code, position, null);
b.setPositiveButton("OK", positiveListener);
AlertDialog d = b.create();
return d;
}
}
来源:https://stackoverflow.com/questions/5250765/android-custom-list-dialog