2010-12-10 3 views
2

Ich habe eine benutzerdefinierte Liste, die zwei TextViews und zwei Buttons enthält. Ich möchte, dass eine Schaltfläche die in einer Textansicht angezeigten Daten ändert, und ich möchte, dass die andere Schaltfläche ein Dialogfeld aufbläht, das den Zweck dieser Zeile erläutert. Also muss ich den Dialoginhalt dynamisch aktualisieren. So weit ich weiß, ist die einzige Möglichkeit, einen klickbaren Button in eine Liste zu integrieren, den OnClickListener in einem Adapter zu setzen, wenn Sie die Zeile aufblähen, aber ich kann keinen Dialog außerhalb der Aktivität erstellen (ich bekomme einen Force Close) . Hier ist mein Aufruf getView(). Irgendwelche Vorschläge??Android: Aufrufen eines Dialogfelds über eine in einer Liste eingebettete Schaltfläche

Öffentlichkeit getView (final int Position, Ansicht convertView, Viewgroup parent) {

final ViewHolder holder; 

    if (convertView == null) { 

     convertView=mInflater.inflate(R.layout.text_list_item,null); 

     holder=new ViewHolder(); 
     holder.clear=(Button)convertView.findViewById(R.id.btnClr); 
     holder.label=(TextView) convertView.findViewById(R.id.textListItemLabel); 
     holder.value=(TextView) convertView.findViewById(R.id.textListItemValue); 
     holder.info=(Button)convertView.findViewById(R.id.btnInfo); 
     holder.group= (RadioGroup)convertView.findViewById(R.id.radiogroup); 
     holder.r1=(RadioButton)convertView.findViewById(R.id.radio1); 
     holder.r2=(RadioButton)convertView.findViewById(R.id.radio2); 
     holder.t1=(ToggleButton)convertView.findViewById(R.id.toggle1); 

     holder.clear.setOnClickListener(new OnClickListener(){ 
      private int pos= position; 

      @Override 
      public void onClick(View v){ 

       holder.value.setText(String.valueOf(pos)); 
       notifyDataSetChanged();//I know there's a problem on here, and I'm working on that... but at least it reacts to the button press. 

      } 
      }); 

     holder.info.setOnClickListener(new OnClickListener(){ 
      private int pos= position; 


      @Override 
      public void onClick(View v){ 
       Button button = (Button) v; 

       AlertDialog.Builder builder = new AlertDialog.Builder(context); 
       builder.setMessage("Are you sure you want to display?"); 
        .setCancelable(false) 
         .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           MyActivity.this.finish(); 
          } 
         }) 
         .setNegativeButton("No", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.cancel(); 
          } 
         }); 
       builder.create();//Ok to here... 
       builder.show();//Crash 
       String.valueOf(pos), Toast.LENGTH_SHORT).show(); 
      } 


      }); 
     convertView.setTag(holder); 

    } else { 

     holder = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 

} 

Antwort

1

Die Aktivität, die den Adapter enthält, nicht verarbeiten kann seinen eigenen Lebenszyklus - Activity.onPause(), wenn es eine Anforderung von einem enthaltenen Objekt wie dieser Adapter, um die Aktivität mit Dialog abzudecken.

Um es zu handhaben, verschieben Sie den Code AlertDialog in die Aktivität innerhalb einer neuen Methode, die durch Drücken der Schaltfläche aufgerufen wird.

Sie können das tun, indem Sie das Argument des Attributs in der Definition der Schaltfläche xml mit dem Namen der Methode füllen, wie zuvor erwähnt.

wie hier: http://androidforbeginners.blogspot.com/2010/03/clicking-buttons-in-listview-row.html

Verwandte Themen