2014-02-28 29 views
5

Ich muss einen benutzerdefinierten Alarmdialog mit einer einzigen Option erstellen. Aber Elemente haben ihr eigenes Layout:Benutzerdefinierter Alarmdialog mit benutzerdefinierter Listenansicht

[VIEW (nur Farbe) _______ TEXT_______RADIOBUTTON]

ich ein benutzerdefiniertes Layout für Listenansicht, kundenspezifische Adapter erstellt habe und ein schönes Ergebnis enter image description here

habe Aber ich kann keine einzige Wahl treffen, niemand Listener setzt auf Listview ...: Hier ist mein Adapter:

public class AlertListAdapter extends BaseAdapter { 

ArrayList<AlertChoiceItem> mData; 
Context mContext; 
LayoutInflater inflater; 
public AlertListAdapter(ArrayList<AlertChoiceItem> data, Context context) { 
    mData = data; 
    mContext = context; 
    inflater = LayoutInflater.from(context); 
} 
@Override 
public int getCount() { 
    return mData.size(); 
} 

@Override 
public Object getItem(int arg0) { 
    return null; 
} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater mInflater = (LayoutInflater) mContext 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     convertView = mInflater.inflate(R.layout.item_alert_list, null); 
    } 
    TextView tvTitle = (TextView) convertView.findViewById(R.id.tvTitleAlertList); 
    View v = (View) convertView.findViewById(R.id.vPriorAlertList); 
    v.setBackgroundColor(GetColorByPriority.getColor(position, mContext)); 
    tvTitle.setText(mData.get(position).getTitle()); 
    RadioButton rb = (RadioButton) convertView.findViewById(R.id.rbRadioAlertList); 


    return convertView; 
} 
Hier

}

i-Benachrichtigung erstellen:

AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 
       // dialog.setContentView(R.layout.alert_list_radio); 
       dialog.setTitle("List Title"); 
       View customView = LayoutInflater.from(getActivity()).inflate(
         R.layout.alert_list_radio, null, false); 
       ListView listView = (ListView) customView.findViewById(R.id.lvAlertList); 

       // ArrayAdapter<String> ad = new ArrayAdapter<String>(this, 
       // R.layout.single_item_layout , R.id.singleItem, dummies); 
       ArrayList<AlertChoiceItem> itemList = new ArrayList<AlertChoiceItem>(); 
       itemList.add(new AlertChoiceItem(false, "Critical", 5)); 
       itemList.add(new AlertChoiceItem(false, "High", 4)); 
       itemList.add(new AlertChoiceItem(false, "Medium", 3)); 
       itemList.add(new AlertChoiceItem(false, "Low", 2)); 
       itemList.add(new AlertChoiceItem(false, "Very low", 1)); 
       itemList.add(new AlertChoiceItem(false, "Off filter", 0)); 

       AlertListAdapter mAdapter = new AlertListAdapter(itemList, getActivity()); 
       listView.setAdapter(mAdapter); 
       listView.setOnItemClickListener(mOnItemClick); 
       listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
       dialog.setView(customView); 
       dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 

        } 
       }); 
       dialog.show(); 

Wie einzelne Wahl hinzufügen?

UPD: AlertChoiceItem Implen:

public class AlertChoiceItem { 

private boolean isChecked; 
private String title; 
private int prior; 
public AlertChoiceItem(boolean isChecked, String title, int prior) { 
    super(); 
    this.isChecked = isChecked; 
    this.title = title; 
    this.prior = prior; 
} 
public boolean isChecked() { 
    return isChecked; 
} 
public void setChecked(boolean isChecked) { 
    this.isChecked = isChecked; 
} 
public String getTitle() { 
    return title; 
} 
public void setTitle(String title) { 
    this.title = title; 
} 
public int getPrior() { 
    return prior; 
} 
public void setPrior(int prior) { 
    this.prior = prior; 
} 

}

+0

Warum machst du so viel .. die gesamte Aufgabe wird beendet, wenn Sie einen Spinner in listview verwenden, wenn Sie einzelne Auswahl haben möchten. – Ranjit

+0

Ich kann Spinner nicht verwenden. Sie wollen listview: D – onCreate

+0

warum kannst du nicht ?? – Ranjit

Antwort

1

Lösen Sie Problem in einer solchen Art und Weise:

1) Stellen Sie alle() Ansichten in Layout nicht fokussierbar!.

2) in-Aktivität onClickItemListener

3) Mit jedem zur Listenansicht klicken Sie senden Signal an Adapter alle Prüfungen zu entfernen, neu eingestellt (von Position) und Re-Draw-Listenansicht.

0

Sie können versuchen, das Hinzufügen ItemClick Zuhörer zu Ihrem Listview

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, 
       long id) { 
      // do whatever you want 

     } 
    }); 
+0

Es ist nicht Arbeit ... Kein Effekt. Das gleiche gilt für "focusable = false" in radiobutton xml – onCreate

0

Überprüfen Sie Ihre Implementierung von AlertChoiceItem. Stellen Sie sicher, dass es die Schnittstelle Checkable implementiert und an die zugrunde liegende RadioButton weiterleitet, die Sie verwenden.

1

Set in item_alert_list XML-Datei

android:focusable = "false" 
android:focusableInTouchMode="false" 

für alle UI-Elemente.

Verwandte Themen