Диалог оповещений в виде списка из выбранного элемента - PullRequest
0 голосов
/ 04 января 2011

У меня возникли некоторые проблемы с окном alerttdialog.У меня есть список, содержащий несколько строк, и когда я нажимаю на поле, он показывает диалоговое окно с предупреждением, давая возможность забронировать или отменить (это приложение такси).Я пытаюсь получить его, чтобы имя выбранного элемента отображалось в диалоговом окне предупреждения.Но каждый раз, когда я пытаюсь, это показывает случайные буквы и цифры.Я опубликую свой код, так как это может облегчить его понимание:

Код ниже -

public class TaxiMain extends ListActivity {
/** Called when the activity is first created. 
 * @return */

class Taxi {
    private String taxiName;
    private String taxiAddress;

    public String getName() {
        return taxiName;
    }

    public void setName(String name) {
        taxiName = name;
    }

    public String getAddress() {
        return taxiAddress;
    }

    public void setAddress(String address) {
        taxiAddress = address;
    }

    public Taxi(String name, String address) {
        taxiName = name;
        taxiAddress = address;
    }
}

public class TaxiAdapter extends ArrayAdapter<Taxi> {
    private ArrayList<Taxi> items;
    private TaxiViewHolder taxiHolder;

    private class TaxiViewHolder {
        TextView name;
        TextView address; 
    }

    public TaxiAdapter(Context context, int tvResId, ArrayList<Taxi> items) {
        super(context, tvResId, items);
        this.items = items;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.taxi_list_item, null);
            taxiHolder = new TaxiViewHolder();
            taxiHolder.name = (TextView)v.findViewById(R.id.taxi_name);
            taxiHolder.address = (TextView)v.findViewById(R.id.taxi_address);
            v.setTag(taxiHolder);
        } else taxiHolder = (TaxiViewHolder)v.getTag(); 

        Taxi taxi = items.get(pos);

        if (taxi != null) {
            taxiHolder.name.setText(taxi.getName());
            taxiHolder.address.setText(taxi.getAddress());
        }

        return v;
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final String[] taxiNames = getResources().getStringArray(R.array.taxi_name_array);
    final String[] taxiAddresses = getResources().getStringArray(R.array.taxi_address_array);

    ArrayList<Taxi> taxiList = new ArrayList<Taxi>();

    for (int i = 0; i < taxiNames.length; i++) {
        taxiList.add(new Taxi(taxiNames[i], taxiAddresses[i]));
    }

    setListAdapter(new TaxiAdapter(this, R.layout.taxi_list_item, taxiList));  

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);

        lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> a, View v, final int position, long id)
        {   

            final int selectedPosition = position;
            AlertDialog.Builder adb=new AlertDialog.Builder(TaxiMain.this); 
             adb.setTitle("Taxi Booking");
             adb.setMessage("You Have Selected: "+taxiNames); 
             adb.setPositiveButton("Book", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int id) {
                     Intent intent = new Intent(TaxiMain.this, Booking.class);
                     intent.putExtra("booking",  taxiNames[selectedPosition]);
                     intent.putExtra("address",  taxiAddresses[selectedPosition]);
                     startActivity(intent);
                 }
             });
             adb.setNegativeButton("Cancel", null); 
             adb.show();
         }
     });

Внизу кода вы увидите строку, которая работает некорректно.-

adb.setMessage("You Have Selected: "+taxiNames);

Если кто-нибудь может помочь понять, почему этот показ не будет очень полезен.

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 января 2011

taxiNames - это массив, а не строка.Вы должны попробовать это:

adb.setMessage("You Have Selected: "+taxiNames[selectedPosition]); 
1 голос
/ 04 января 2011

Когда вы набираете +taxiNames, вы выполняете taxiNames.toString().taxiNames - массив, содержащий количество элементов.Вам нужно просто изменить его на + taxiNames[position].Или, чтобы привести его в соответствие с другими объектами Такси, вы также можете использовать + taxiList.get(position).getName().

РЕДАКТИРОВАТЬ: Из любопытства, почему вы устанавливаете еще final int для selectedPosition?Вы уже передали final int position в вызове метода.

...