Dialog in Benutzerdefinierten Adapter in android
Habe ich eine eigene adapter, die haben eine checkbox und ein textview.Ich möchte, wenn der Benutzer klickte auf eine Zeile ein alert-Dialogfeld pop-up und Benutzer-Daten eingeben.Ich benutze folgenden code in der Aktivität und fein gearbeitet:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.floordialog,
(ViewGroup) findViewById(R.id.floordialog));
floornum = (EditText) layout.findViewById(R.id.floordialog_floornumber);
unitnum = (EditText) layout.findViewById(R.id.floordialog_unitnumber);
Button next = (Button) layout.findViewById(R.id.floordialog_next);
Button cancel = (Button) layout.findViewById(R.id.floordialog_cancel);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("floors");
builder.setView(layout);
builder.setCancelable(false);
builder.create();
flooralert = builder.create();
flooralert.show();
next.setOnClickListener(this);
cancel.setOnClickListener(this);
aber ich kann nicht verwenden Sie in MyCustomAdapter, weil ich nicht verlängern Aktivität, wie kann mein problem lösen?
und das ist mein CustomAdapter
public MyadapterForListFloor(Activity a, int textViewResourceId,
ArrayList<Integer> Floornum) {
super();
unitdialog = new UnitDialog();
this.entries = Floornum;
this.activity = a;
}
@Override
public int getCount() {
return entries.size();
}
@Override
public Object getItem(int arg0) {
//TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
//TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.unitview, null);
holder = new ViewHolder();
holder.text = (TextView) v.findViewById(R.id.UnitTextview);
holder.checked = (CheckBox) v.findViewById(R.id.unitCheckbox);
v.setTag(holder);
holder.checked.setTag(entries.get(position));
holder.text.setTag(entries.get(position));
holder.checked.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ViewHolder obj = new ViewHolder();
obj.checked = (CheckBox) v.findViewById(R.id.unitCheckbox);
getid = (Integer) v.getTag();
if (isChecked(getid))
{
obj.checked.setChecked(true);
unitdialog.DialogForFloor();
Urban.selectedRow.add(getid);
}
else
Log.d("in else onclick", "**");
}
private boolean isChecked(int getid) {
for (int i = 0 ; i< Urban.selectedRow.size() ; i++)
{
if (Urban.selectedRow.get(i)== getid)
return false;
}
return true;
}
});
holder.text.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
holder.checked.performClick();
}
});
}
else
{
((ViewHolder) v.getTag()).checked.setTag(entries.get(position));
holder = (ViewHolder) v.getTag();
getid = (Integer) holder.checked.getTag();
Log.d("geti is", String.valueOf(getid));
if (checkBoxRefresh(getid))
holder.checked.setChecked(true);
else
holder.checked.setChecked(false);
}
final String str = String.valueOf(entries.get(position));
if (str != null) {
holder.text.setText(str);
}
return v;
}
private boolean checkBoxRefresh(int FloorNum) {
Log.d("urban.selectedrow.size is", String.valueOf(Urban.selectedRow.size()));
for (int i = 0 ; i < Urban.selectedRow.size() ; i++)
{
if (Urban.selectedRow.get(i) == FloorNum)
return true;
}
return false;
}
static class ViewHolder {
TextView text;
CheckBox checked;
}
}
- Übergeben Sie Ihrem Kontext zu MyCustomAdapter. Zeigen Sie Ihren code für MyCustomAdapter..
- Siehe Mein Edit-Code
- Was ist also das problem? Was wollen Sie tun, dass Sie nicht tun können?
- Ich habe CustomAlertDialog Auch, dass ich brauche findviewById, die nicht erkennen
- wie kann definieren LayoutInflater und wie können Verweise auf meinen edittext im alertdialog?
- Sie können erstellen Sie eine separate Methode für die benutzerdefinierte alertdialog in Ihrer Klasse, und Sie können die Methode aufruft, wenn Sie auf onItem Ihrer ListView-oder je nachdem, was Sie verwendet haben, durch die Umsetzung
setOnItemClickListener
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Klasse CustomAdapter müssen Sie deklarieren Sie eine Klasse variable mContext
Erstellen Sie einen Konstruktor:
Beim Aufruf CustomAdapter von Aktivität, "Activity_Main.diese" kontextabhängig ist, müssen Sie
Don ' T pass
getApplicationContext()
wir brauchen, um passierenMainActivity.this
dem Konstruktor alsAlertDialog class
benötigen diese, um zu zeigen, alert.Wenn Sie pass
getApplicationContext()
odergetContext()
dann erhalten Sie die folgende Fehlermeldung:Nun, vorbei an der mContext, um zu zeigen, Warnung:
Versuchen Sie dies:
Sind Sie schon vorbei Ihrem Kontext zu
MyCustomAdapter
.Einfach an der notwendigen
Context
zu Ihremadapter
von der Tätigkeit und Verwendung, die Rahmen in Ihrem dailog.Hier@
Wie Sie erwähnen in Ihrem Kommentar, dass Sie haben, um benutzerdefinierte Dialogfeld und Sie haben zu tun findviewById.
können Sie tun, wie dieser@ (Es ist nur ein Beispiel)
Aktualisiert