2016-05-04 9 views
0

Ich möchte die Ansicht des Popup-Dialogfelds als Rasterelement festlegen. Ich erhalte dieses Objekt als Ansicht im OnClickListener-Ereignis, das im Adapter festgelegt ist.Verwenden Sie Rasterelement von Adapter im Dialogfeld Popup als Ansicht in Android

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View grid; 
    final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     grid = inflater.inflate(R.layout.child_card, null); 
     final TextView textView = (TextView) grid.findViewById(R.id.childName); 
     //ImageView imageView = (ImageView)grid.findViewById(R.id.childImage); 
     textView.setText(children.get(position).getName()); 

     grid.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       v.setBackgroundColor(Color.GREEN); 
       AlertDialog.Builder builder=new AlertDialog.Builder(context); 
       builder.setView(v); 

       final Dialog dialog = builder.create(); 
       dialog.show(); 
       final Handler handler = new Handler(); 
       final Runnable runnable = new Runnable() { 
        @Override 
        public void run() { 
         if (dialog.isShowing()) { 
          dialog.dismiss(); 
         } 
        } 
       }; 

       dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
        @Override 
        public void onDismiss(DialogInterface dialog) { 
         handler.removeCallbacks(runnable); 
        } 
       }); 
       handler.postDelayed(runnable, 3000); 
      } 
     }); 
    } else { 
     grid = (View) convertView; 
    } 

    return grid; 
} 

bekam ich diese Fehlermeldung: „Der angegebene Kind bereits ein Elternteil Sie müssen RemoveView() aufrufen, auf der Eltern Kind zuerst.“

+0

Niemand hat eine Antwort? –

Antwort

0

Beobachtungen: - Erstellen Sie kein redudantes View-Objekt, wenn convertView bereits verfügbar ist. -Einstellung der Daten sollte außerhalb der if-else-Schleife erfolgen. -Klick Listener sollte auch außerhalb von if-else-Schleife sein. - Verwenden Sie das ViewHolder-Muster zum Initialisieren von Ansichten. -In child_card layout set Markieren Sie in xml für jede Textansicht und Bildansicht.

Zum Beispiel

<TextView 
android:id="" 
android:layout_width ="" 
android:layout_height="" 
android:tag="1" 
/> 

ebenfalls für Image.

Probieren Sie den folgenden Code aus.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    if(convertView == null) { 
     holder = new ViewHolder; 
     convertView = inflater.inflate(R.layout.child_card, null); 
     holder.textView = (TextView) convertView.findViewById(R.id.childName); 
     //holder.imageView = (ImageView)convertView.findViewById(R.id.childImage); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    // set views here. 
    holder.textView.setText(children.get(position).getName()); 

    // add click Listener here. 
    convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       v.setBackgroundColor(Color.GREEN); 
       AlertDialog.Builder builder=new AlertDialog.Builder(context); 
       builder.setView(v); 

       final Dialog dialog = builder.create(); 
       dialog.show(); 
       final Handler handler = new Handler(); 
       final Runnable runnable = new Runnable() { 
        @Override 
        public void run() { 
         if (dialog.isShowing()) { 
          dialog.dismiss(); 
         } 
        } 
       }; 

       dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
        @Override 
        public void onDismiss(DialogInterface dialog) { 
         handler.removeCallbacks(runnable); 
        } 
       }); 
       handler.postDelayed(runnable, 3000); 
      } 
     }); 

     return convertView; 
} 

class ViewHolder { 
    TextView textView; 
    ImageView imageView; 
} 
+0

es funktioniert nicht für mich :( Ich habe wieder den gleichen Fehler –