2016-08-11 6 views
0

Ich habe ListView mit Elementen in meinem Fragment. Jedes Einzelteil hat Zähler zum BeispielRefresh Fragment von Adapter

Artikel 1 bis 4 Artikel 2 bis 5 Auf der Oberseite des Fragments I Textview mit Summe aller Elemente haben: sum - 9. Ich Artikel mit Klick auf das Bild auf der Position löschen können Reihe. In Adapter (getView()) geht es wie folgt aus:

final LinearLayout delete = (LinearLayout)dialog.findViewById(R.id.delete_layout); 
        delete.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          mParts.remove(part); 
          notifyDataSetChanged(); 
          dialog.dismiss(); 
        } 
       }); 

Der Artikel wird aus der Liste entfernt, aber Zählerwert nicht ändert - für 2 Beispiel Artikel wurde entfernt, aber Zähler zeigt noch 5. ich sie aktualisieren in onResume() -Methode und es funktioniert aber nur, wenn ich Fragment verlasse und darauf zurück komme. Ich versuche Update-Methode in Fragmente zu schreiben und es in Adapter verwenden - ich erstellt Konstruktor mit Fragmente:

public PartAdapter(Context context, int resource, List objects, InvActivity mActivity,InvFragment mFragment) { 
     super(context, resource,objects); 
     this.mParts = objects; 
     mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.mActivity=mActivity; 
     this.mFragment = mFragment; 
    } 

aber wenn ich fragment.something nenne ich null Punkt Ausnahme erhalten:/Wie kann ich aktualisieren Fragment/Zähler Textview aus Adapter? Ich habe auch versucht, das Fragment wieder zu setzen, aber es funktioniert nicht.

Teil meines Adapters (es ist ziemlich lang)

public class PartAdapter extends ArrayAdapter { 
    private OnUpdateListener listener; 
    public interface OnUpdateListener { 
     void onUpdate(String text); 
    } 

public void setOnUpdateListner(OnUpdateListener listener) { 
    this.listener = listener; 
} 

private List<Part>mParts; 
private LayoutInflater mInflater; 
private TextView mPartName; 
public CheckBox mState; 
private ImageView mActionArrow; 
public static final String TAG = PartAdapter.class.getSimpleName(); 
private static final int CAM_REQUEST = 1313; 
private InvActivity mActivity; 
private AdapterCallback mAdapterCallback; 
private TextView mCounter; 
private ImageView mDelete; 
private InvFragment mFragment; 
public boolean shouldScan = true; 

private final byte[] pal = new byte[]{ 
     (byte) 0xDA, (byte) 0xAD, // const 
     (byte) 0x04, (byte) 0x74, (byte) 0x31, // com 
     (byte) 0xe7, (byte) 0x64 //last 

}; 
private final byte[] readId = new byte[]{ 
     (byte) 0xDA, (byte) 0xAD, // const 
     (byte) 0x04, (byte) 0x6f, (byte) 0x69, // com 
     (byte) 0xec, (byte) 0x6e //last 


}; 
private UsbManager usbManager; 
private UsbDevice device; 
public List<String> codes; 




public PartAdapter(Context context, int resource, List objects, InvActivity mActivity,AdapterCallback callback) { 
    super(context, resource,objects); 
    this.mParts = objects; 
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.mActivity=mActivity; 
    this.mAdapterCallback = callback; 
} 
public PartAdapter(Context context, int resource, List objects, InvActivity mActivity,InvFragment mFragment) { 
    super(context, resource,objects); 
    this.mParts = objects; 
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.mActivity=mActivity; 
    this.mFragment = mFragment; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    if(convertView == null) 
     convertView=mInflater.inflate(R.layout.part_item,parent,false); 
    mState = (CheckBox) convertView.findViewById(R.id.state_chb); 
    mDelete = (ImageView)convertView.findViewById(R.id.delete_car); 
    mDelete.setVisibility(View.INVISIBLE); 


    final Part party = mParts.get(position); 
    if(party.isScan() || party.getType().contentEquals("2")) { 
     mState.setChecked(true); 
    } else if (!party.isScan()){ 
     mState.setChecked(false); 
    } 
    if(party.getType().contentEquals("2")) 
     mDelete.setVisibility(View.VISIBLE); 


    if(mParts.get(position).getClass().isInstance(new Part())) { 
     final Part part = (Part) mParts.get(position); 
     mPartName = (TextView)convertView.findViewById(R.id.car_name_tv); 
     mState = (CheckBox) convertView.findViewById(R.id.state_chb); 
     mPartName.setText(part.getName()); 
     mActionArrow = (ImageView)convertView.findViewById(R.id.arrow_action); 
     mCounter = (TextView)convertView.findViewById(R.id.car_count_tv); 
     mCounter.setText(part.getQuantity()); 
     if(!part.isScan()) { 
      mState.setChecked(false); 
     } else if(part.isScan() || part.getType().contentEquals("2")) { 
      mState.setChecked(true); 
     } 

     mActionArrow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       final Dialog dialog = new Dialog(getContext()); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

       dialog.setContentView(R.layout.dialog_context_menu); 

       final LinearLayout delete = (LinearLayout)dialog.findViewById(R.id.delete_layout); 
       delete.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         int totalSum = 5; 
         int partValue = 2; 
         mParts.remove(part); 
         notifyDataSetChanged(); 
         dialog.dismiss(); 
         if(listener != null){ 
          listener((totalSum - partValue).toString()); 
         } 

        } 
       }); 
       LinearLayout photo = (LinearLayout)dialog.findViewById(R.id.photo_layout); 
       photo.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         mActivity.dispatchTakePictureIntent(); 

        } 
       }); 
       LinearLayout note = (LinearLayout)dialog.findViewById(R.id.note_layout); 
       note.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
         final Dialog noteDialog = new Dialog(getContext()); 
         noteDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
         noteDialog.setContentView(R.layout.dialog_note); 
         final EditText noteET = (EditText)noteDialog.findViewById(R.id.note_et); 
         if(!part.getNote().contentEquals("null")) 
          noteET.setText(part.getNote()); 
         Button save = (Button)noteDialog.findViewById(R.id.save_button); 
         save.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           part.setNote(noteET.getText().toString()); 
           noteDialog.dismiss(); 
          } 
         }); 
         noteDialog.show(); 
         Button cancel = (Button) noteDialog.findViewById(R.id.cancel_button); 
         cancel.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           noteDialog.dismiss(); 
          } 
         }); 

        } 
       }); 

       LinearLayout values = (LinearLayout)dialog.findViewById(R.id.values_layout); 
       values.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         final Dialog noteDialog = new Dialog(getContext()); 
         noteDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
         noteDialog.setContentView(R.layout.dialog_note); 
         final EditText noteET = (EditText)noteDialog.findViewById(R.id.note_et); 
         noteET.setInputType(InputType.TYPE_CLASS_NUMBER); 
         Button save = (Button)noteDialog.findViewById(R.id.save_button); 
         save.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           part.setQuantity(noteET.getText().toString()); 
           noteDialog.dismiss(); 
           dialog.dismiss(); 
          } 
         }); 
         noteDialog.show(); 
         Button cancel = (Button) noteDialog.findViewById(R.id.cancel_button); 
         cancel.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           noteDialog.dismiss(); 
           dialog.dismiss(); 
          } 
         }); 
        } 
       }); 

       dialog.show(); 
      } 
     }); 

    } 


    return convertView; 
} 

und aus meiner Tätigkeit:

public void onUpdate(String value){ 
     mCountTV.setText(value); 
    } 

private void createAdapter() { 
    adapter.setOnUpdateListner(this); 
} 

}

+1

try-Schnittstelle in Ihrem Adapter als Fang löscht Rückruf in Ihrem Fragmente und Update hinzufügen Textview –

Antwort

1

Sie können wie unten, um ein Verfahren folgen.

In Ihrem PartAdapter einen Listener festgelegt, die in Fragmente implementiert werden aktualisieren Wert von sum Textansicht verwendet.

class PartAdapter { 
    private OnUpdateLitener listener; 

    public interface OnUpdateListener { 
     void onUpdate(String text); 
    } 

    public void setOnUpdateListner(OnUpdateListener listener) { 
     this.listener = listener; 
    } 

    // in your getView() method 
    final LinearLayout delete = (LinearLayout)dialog.findViewById(R.id.delete_layout); 
       delete.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         mParts.remove(part); 
         notifyDataSetChanged(); 
         if(listener != null){ 
          listener.onUpdate(String.valueOf(totalSum - partValue)); 
         } 
         dialog.dismiss(); 
       } 
      }); 
} 

In Ihrem Fragmente

class MyFragment { 

    private OnUpdateListener listener; 

    void onAttach(Activity activity){ 
     if(!(activity instaceof PartAdapter.OnUpdateListener)){ 
      throw new IllegalStateException("Must implement OnUpdateListener"); 
     } 
     listener = (PartAdapter.OnUpdateListener) activity; 

    } 

    private void createAdapter() { 
     PartAdapter adapter = new PartAdapter(getContext(), R.layout.part_item, mParts, mActivity, new AdapterCallback() { 
      @Override 
       public void onMethodCallback() { 
        Log.e(TAG, "onMethodCallback: "); 
       } 
      }); 
      adapter.setOnUpdateListener(this); 
      mPartsLV.setAdapter(adapter); 
    } 
} 

In Ihrer Tätigkeit

class MainActivity implements PartAdapter.OnUpdateListener { 

    public void onUpdate(String value){ 
      textView.setText(value); 
    } 
} 
+0

Es funktioniert nicht. Ich habe genau wie Sie beschrieben, aber keine Antwort in Fragment:/ – Bartos

+0

Teilen Sie Ihre Fragment-und Adapter-Klasse diejenigen, die Sie gerade versucht haben. –

+0

Ich habe meinen Beitrag bearbeitet. Das Problem liegt auch beim Line Listener ((totalSum - partValue) .toString()); - toString ist als nicht aufgelöst markiert. totalSum und partValue Ich habe als Standard eingerichtet, um zu überprüfen, ob es funktioniert :) – Bartos

Verwandte Themen