2017-03-20 1 views
-2

Das ist meine Listview, mein Problem ist, warum ich versuche, auf mein ImageButton (in Listview) zu klicken, aber die Textansicht (in Listview) nie den Wert ändern, was ich wollen. Es dauert meinen ganzen Morgen, kann mir bitte jemand helfen, Danke.Wie man meinen TextView Wert ändert, indem ich auf ImageButton in ListView klicke

public class ViewAdapter extends BaseAdapter implements Filterable { 

     LayoutInflater mInflater; 

     public ViewAdapter() { 
      mInflater = LayoutInflater.from(getActivity()); 
     } 

     @Override 
     public int getCount() { 
      return pl.size(); 
     } 

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

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

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

      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.listproduct, null); 
      } 
      final TextView ProductCode = (TextView) convertView.findViewById(R.id.productcode); 
      ProductCode.setText("" + pl.get(position).getProductCode()); 
      final TextView Qty = (TextView) convertView.findViewById(R.id.qty); 
      Qty.setText("" + pl.get(position).getQty()); 
      final TextView Description = (TextView) convertView.findViewById(R.id.description); 
      Description.setText("" + pl.get(position).getProductName()); 
      final String p = Description.getText().toString(); 
      final TextView Price = (TextView) convertView.findViewById(R.id.price); 
      Price.setText("" + pl.get(position).getProductPrice()); 
      final ImageButton minus = (ImageButton) convertView.findViewById(R.id.minus); 

      minus.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Qty.setText("testing")// textview never change to "testing" 
       } 
      }); 
      notifyDataSetChanged(); 
      return convertView; 
     } 

Antwort

0

Grundsätzlich sollte man RecyclerView verwenden, aber wenn Sie immer noch das Listview verwenden möchten, verwenden Sie die Ansicht Halter Ansatz wie in diesem unten stehenden Link:

Optimize list view

Und Sie sollten nie nennen notifyDataSetChanged() in getView Verfahren als mehrere Zeit als Listview Rollen

0

Bitte versuchen Sie Ihren Code mit Halter nur folgt wie

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

    ViewHolder holder; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.list_entry, null); 
     holder = new ViewHolder(); 
     holder.nameTextView = (TextView) convertView.findViewById(R.id.person_name); 
     holder.surnameTextView = (TextView) convertView.findViewById(R.id.person_surname); 
     holder.personImageView = (ImageView) convertView.findViewById(R.id.person_image); 
     convertView.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    Person person = getItem(position); 

    holder.nameTextView.setText(person.getName()); 
    holder.surnameTextView.setText(person.getSurname()); 
    //holder.personImageView.setImageBitmap(person.getImage()); 

    return convertView; 
} 

Klicken Sie dann wie folgt

holder.personImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       holder.nameTextView.setText("testing")// textview never change to "testing" 
      } 
     }); 
0
Use this code : 





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

        if (convertView == null) { 
         convertView = mInflater.inflate(R.layout.listproduct, null); 
        } 
        final TextView ProductCode = (TextView) convertView.findViewById(R.id.productcode); 
        ProductCode.setText("" + pl.get(position).getProductCode()); 
        final TextView Qty = (TextView) convertView.findViewById(R.id.qty); 

        final TextView Description = (TextView) convertView.findViewById(R.id.description); 
        Description.setText("" + pl.get(position).getProductName()); 
        final String p = Description.getText().toString(); 
        final TextView Price = (TextView) convertView.findViewById(R.id.price); 
        Price.setText("" + pl.get(position).getProductPrice()); 
        ImageButton minus = (ImageButton) convertView.findViewById(R.id.minus); 
        minus.setTag(position); 
        minus.setOnClickListener(clickButton); 

        return convertView; 
       } 

      private View.OnClickListener clickButton = new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Object tag =v.getTag(); 
        if(tag!=null) 
        { 
        int pos = (Integer)tag; 
       Qty.setText(pl.get(position).getQty()); 
       notifyDataSetChanged(); 


     } 
       } 
      } ; 
0

Soweit ich aus Ihrer Frage verstehen kann, weil sein nicht getan, wenn Sie die Daten in benutzerdefinierten Listview füllen haben Sie es neu erstellen oder die benutzerdefinierte rufen listView erneut mit Textanzeige, die Sie ändern möchten!

Verwandte Themen