Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Feb 2010

Android Listview

Hej,

Har ett litet problem som jag inte kan komma underfund med.
Jag har skapat en Dialog med en custom Listview som innehåller Radiobuttons.
Klass 'a' är mitt DialogFragment och klass 'b' är min ArrayAdapter.
Det jag vill veta är hur jag från klass 'a' kan få reda på vilken Radiobutton som har blivit vald i klass 'b'
All hälp mottages, är rätt ny inom detta.
Har provat att sätta en onClickItemListener på min listview i klass 'a', men eftersom det är en Radiobutton jag trycker på och inte en rad så verkar den inte som registrera några onClick.
Har försökt att googla lite men inte hittat något vettigt.

Klass 'a' kod:

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); final View fishSpeciesLayout = inflater.inflate(R.layout.dialog_fish_species, null); final String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2", "Android", "iPhone", "WindowsMobile" }; final ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < values.length; ++i) { list.add(values[i]); } final FishSpeciesArrayAdapter adapter = new FishSpeciesArrayAdapter(getActivity(), values); listViewFishSpecies = (ListView) fishSpeciesLayout.findViewById(R.id.listViewFishSpecies); listViewFishSpecies.setAdapter(adapter); return builder.create();

Klass 'b' kod:

public FishSpeciesArrayAdapter(Context context, String[] values) { super(context, -1, values); this.context = context; this.values = values; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (convertView == null) { convertView = inflater.inflate(R.layout.fish_species_row_layout, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.radioButton.setTag(position); holder.radioButton.setText(values[position]); if (position == selectedPosition) { holder.radioButton.setChecked(true); } else { holder.radioButton.setChecked(false); } holder.radioButton.setOnClickListener(onStateChangeListener(holder.radioButton, position)); return convertView; } private View.OnClickListener onStateChangeListener(final RadioButton radioButton, final int position) { return new View.OnClickListener() { @Override public void onClick(View v) { if (radioButton.isChecked()) { selectedPosition = position; Log.i("Selected value is", "" + radioButton.getText().toString()); } else { selectedPosition = -1; } notifyDataSetChanged(); } }; } private static class ViewHolder { private RadioButton radioButton; public ViewHolder(View v) { radioButton = (RadioButton) v.findViewById(R.id.radioButtonFishSpecies); } }

Var snäll och tänk på miljön innan du väljer att skriva ut svaret ovan

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004
Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Feb 2010

Detta hjälpte faktiskt mig att lösa det, att ta bort Radiobutton som klickbar view och låta Listview ta hand om onClick gjorde att jag kunde hämta vilken rad som blev tryckt och på så sätt koppla det till vilken Radiobutton som blev vald.
Tackar så mycket för hjälpen!

Var snäll och tänk på miljön innan du väljer att skriva ut svaret ovan