2016-11-07 2 views
-1

Auf dem gleichen Aktivitätslayout habe ich ein TextView-Feld und ein ListView mit einer Schaltfläche für jedes Element. In meinem ListView-Array-Adapter habe ich einen Button click Listener innerhalb der getView() -Methode, wo ich versuche, den Wert meines oben erwähnten TextView-Feldes "dynamisch" zu aktualisieren.Wie aktualisiere ich ein TextView-Feld dynamisch über eine ListView-Schaltfläche?

Bisher konnte ich den TextView-Wert mit Hilfe einer überhöhten Instanz aktualisieren, aber ich kann den aktualisierten TextView nur sehen, wenn ich die Seite durch erneutes Aufrufen der Aktivitätsseite aus dem Hauptmenü aktualisiere.

Als letzte Lösung habe ich es so eingerichtet, dass die Aktivitätsseite innerhalb des Buton-Listeners innerhalb der getView() - Methode neu gestartet wird, ohne dass dies manuell durchgeführt werden muss. Dies ist nicht der beste Weg, da der Benutzer sehen kann, dass die Seite jedes Mal neu geladen wird, wenn er auf die ListView-Objektschaltfläche klickt.

Können Sie mir bitte mitteilen, wie ich den Wert dynamisch aktualisieren kann?

Es folgt mein Adapter Klassencode:

public adapter(Context context, int resource, ArrayList<value> objects) 
{ 
    super(context, resource, objects); 
    layout = resource; 
    array = objects; 
} 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) 
{ 
    box = null; 
    db = new database(getContext()); 

    if (convertView == null) 
    { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(layout, null); 

     box = new holder(); 
     box.X = (TextView) convertView.findViewById(R.id.valueName); 
     box.Y = (TextView) convertView.findViewById(R.id.valueNumber); 
     box.button = (Button) convertView.findViewById(R.id.itemDeleteButton); 
     box.button.setTag(position); 
     convertView.setTag(box); 
    } 

    else 
    { 
     box = (holder) convertView.getTag(); 
    } 

    box.X.setText(getItem(position).getX()); 
    box.Y.setText(String.valueOf(getItem(position).getY())); 

    box.button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      View view = View.inflate(getContext(), R.layout.activity_plan, null); 

      list = (ListView) view.findViewById(R.id.listView); 
      month = (Spinner) view.findViewById(R.id.inputSpinner); 
      remainder = (TextView) view.findViewById(R.id.outputRemainder); 

      adapt = new adapter(getContext(), R.layout.activity_item, array); 
      array.remove(position); 

      month_is = month.getSelectedItem().toString(); 
      db.removePlanData(month_is, position + 1); 
      notifyDataSetChanged(); 

      cursor = db.getHelpDataRows(month_is); 
      cursor.moveToFirst(); 
      val_is = Integer.parseInt(cursor.getString(cursor.getColumnIndex("value"))); 

      remainder_is = val_is - db.getCurrent(month_is); 
      remainder.setText(String.valueOf(remainder_is)); 

      // RESTARTING ACTIVITY TO SEE THE UPDATED TEXTVIEW VALUE OUTSIDE LISTVIEW. 
      Intent intent= new Intent(getContext(), plan.class); 
      getContext().startActivity(intent); 
     } 
    }); 

    return convertView; 
} 


public class holder 
{ 
    TextView X; 
    TextView Y; 
    Button button; 
} 
+1

Es wäre nützlich, wenn Sie Ihren Code –

+0

zeigen Sie Ihren Code zeigen konnte. – Chisko

+0

Danke für Ihre Antworten. Ich habe meinen Code unten gepostet. Entschuldigung für die späte Antwort. Ich schätze Ihre Hilfe! – Ras

Antwort

0

Zunächst einmal wäre es besser, wenn Sie Klassennamen schreiben mit einem Großbuchstaben beginnen. Als nächstes verstehe ich Ihre Situation so: Wenn Sie auf eine Schaltfläche unter listView klicken, sollten Sie in der Lage sein, den textView-Text außerhalb von listView zu ändern. Es kann gemacht werden, indem Sie die textViewpublic static in Ihrer Aktivität machen, so dass Sie aus anderen Klassen zugreifen können. Für die Ex:

MainActivity.textView.setText("something"); 

In Ihrer Haupttätigkeit machen das Textview public static:

public static TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.viloyatlat_frame); 

    textView = (TextView)findViewById(R.id.textView); 

} 
+0

Danke, Abduaziz. Ich verstehe dein Argument. Lass es mich als nächstes ausprobieren. – Ras

+0

Wenn es geholfen hat, bitte, akzeptiere meine Antwort. Viel Spaß beim Schreiben, Ras! –

+0

Das hat den Trick gemacht. Vielen Dank! – Ras

Verwandte Themen