-1

각 행에 2 개의 editText가있는 listview에서 editText를 저장하고 검색하는 방법은 무엇입니까?각 행에 두 개의 편집 텍스트가있는 ListView

이 코드를 사용하면 하나의 editText에 내용을 쓸 때 다른 모든 값으로 값을 복사합니다.

public class CheckoutAdapter extends BaseAdapter{ 

    private Context mContext; 
    private List<JsonObject> mObjs; 
    private ViewHolder holder; 
    private SessionManager session; 
    private float Value = 0; 
    private int tax = 0; 
    private float Total = 0; 
    private int viewID = 0; 
    private EnhancedListView listview; 
    private ImageLoader imageLoader = ImageLoader.getInstance(); 
    static DisplayImageOptions options; 
    private ArrayList<String> arrayFirstName = new ArrayList<String>(); 
    private ArrayList<String> arrayLastName = new ArrayList<String>(); 

    public CheckoutAdapter(Context context, List<JsonObject> objs, EnhancedListView mListView) { 
     // TODO Auto-generated constructor stub 
     this.mContext = context; 
     this.mObjs = objs; 
     this.listview = mListView; 

     for (int i = 0; i < mObjs.size(); i++) { 
      arrayFirstName.add(""); 
      arrayLastName.add(""); 
     } 
    } 
    //Classe ViewHolder 
    public final class ViewHolder { 
     public TextView ticketValue; 
     public TextView ticketItem; 
     public TextView ticketOpcao; 
     public TextView ticketTax; 
     public TextView ticketTitle; 
     public TextView ticketDate; 
     public TextView ticketFullName; 
     public EditText ticketFirstName; 
     public EditText ticketLastName; 
     public ImageView ticketImageThumb; 
     int position; 
    } 

    public void remove(int position) { 
     mObjs.remove(position); 

    } 

    public void insert(int position, JsonObject item) { 
     mObjs.add(position, item); 

    } 

    @Override 
    //Contar a quntidade de linhas. 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return mObjs.size(); 
    } 

    @Override 
    //Pegar o item conforme a posição. 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return mObjs.get(position); 
    } 

    @Override 
    //ID do item (refere-se a posição em que ele se encontra). 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View vi=convertView; 
     //Se não houver nenhuma View, uma nova view é criada. 
      if(convertView==null) 
      { 
       vi = LayoutInflater.from(mContext).inflate(R.layout.row_checkout, null); 
       Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/Oswald-Bold.otf"); 
       final View origView = vi; 
       vi.findViewById(R.id.action_delete).setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         listview.delete(((ViewHolder)origView.getTag()).position); 
        } 
       }); 
      holder = new ViewHolder(); 
      holder.ticketItem = (TextView)vi.findViewById(R.id.tvItem); 
      holder.ticketOpcao = (TextView)vi.findViewById(R.id.tvOpcao); 
      holder.ticketTax = (TextView)vi.findViewById(R.id.tvTaxa); 
      holder.ticketValue = (TextView)vi.findViewById(R.id.tvValue); 
       holder.ticketValue.setTypeface(font); 
      holder.ticketTitle = (TextView)vi.findViewById(R.id.tvTitle); 
       holder.ticketTitle.setTypeface(font); 
      holder.ticketDate = (TextView)vi.findViewById(R.id.tvDate); 
       holder.ticketDate.setTypeface(font); 
      holder.ticketFullName = (TextView)vi.findViewById(R.id.tvFullName); 
       holder.ticketFullName.setTypeface(font); 
      holder.ticketFirstName = (EditText)vi.findViewById(R.id.etFirstName); 
      holder.ticketLastName = (EditText)vi.findViewById(R.id.etLastName); 
      holder.ticketImageThumb = (ImageView)vi.findViewById(R.id.imgFlyerSub); 
       holder.position = position; 
       holder.ticketFirstName.addTextChangedListener(FirstNameChangedListener(position)); 
       holder.ticketLastName.addTextChangedListener(LastNameChangedListener(position)); 
       holder.ticketFirstName.setOnFocusChangeListener(FirstNameFocusChangeListener(position)); 
       holder.ticketLastName.setOnFocusChangeListener(LastNameFocusChangeListener(position)); 

      vi.setTag(holder); 
      //Caso já exista uma view o objeto holder recebe o getTag da View vi. 
     } else { 
      holder = (ViewHolder)vi.getTag(); 
     } 
      holder.ticketItem.setText(mObjs.get(position).getAsJsonObject().get(Constants.JSON.JSON_ITEM).getAsString()); 
      holder.ticketOpcao.setText(mObjs.get(position).getAsJsonObject().get(Constants.JSON.JSON_OPCAO).getAsString()); 
      holder.ticketTax.setText("Taxa de serviço:" + mObjs.get(position).getAsJsonObject().get(Constants.JSON.JSON_TAX).getAsString() + "%"); 
      holder.ticketValue.setText("R$" + String.valueOf(mObjs.get(position).getAsJsonObject().get(Constants.JSON.JSON_VALUE).getAsInt()) + ",00"); 
      holder.ticketDate.setText(mObjs.get(position).getAsJsonObject().get(Constants.KEY.KEY_EVENTDATE).getAsString()); 
      holder.ticketTitle.setText(mObjs.get(position).getAsJsonObject().get(Constants.JSON.JSON_EVENTTITLE).getAsString()); 


      holder.ticketFirstName.setText(arrayFirstName.get(holder.position)); 
      holder.ticketLastName.setText(arrayLastName.get(holder.position)); 


     options = new DisplayImageOptions.Builder() 
       .showStubImage(R.drawable.ic_stub) 
       .showImageForEmptyUri(R.drawable.ico_load_imagem) 
       .cacheInMemory().cacheOnDisc() 
       .displayer(new RoundedBitmapDisplayer(5)) 
       .build(); 
     imageLoader.displayImage(mObjs.get(position).getAsJsonObject().get("thumbPrincipal").getAsString(), holder.ticketImageThumb, options); 




     return vi; 
    } 

    private View.OnFocusChangeListener LastNameFocusChangeListener(final int position) { 
     return new View.OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (!hasFocus){ 
        viewID = holder.position; 


       } 
      } 
     }; 
    } 

    private View.OnFocusChangeListener FirstNameFocusChangeListener(final int position) { 
     return new View.OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (!hasFocus){ 

        viewID = holder.position; 


       } 
      } 
     }; 
    } 

    private TextWatcher FirstNameChangedListener(final int position) { 
     return new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

       String itemName = s.toString(); 
       arrayFirstName.add(viewID, itemName); 
      } 
     }; 
    } 

    private TextWatcher LastNameChangedListener(final int position) { 
     return new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       String itemName = s.toString(); 
       arrayLastName.add(viewID, itemName); 
      } 
     }; 
    } 

} 

편집 : 제거 setId 및 JSON.

+2

당신이'both'ticketFirstName'와'ticketLastName' – Yazan

+0

귀하의 의견 영어 엉해야합니다 위해 동일한 ID 'setId (위치)를 설정하는 것이 될 수있다. 귀하의 질문에 대한 귀하의 의견은 View ID에 관한 것입니다. –

+1

안녕하세요, 당신이하는 일은 정말 안좋은 일입니다. 어댑터로 json 항목을 분리 해보십시오. listview 용 어댑터는 어댑터 일 뿐이며 데이터 만 표시합니다. –

답변

0

귀하의 소지자가 수업의 구성원입니다. 틀렸어. 이 장소에서 제거하십시오. listview의 모든 행에는 독자가 있습니다. 이 홀더는 setTag 메서드에 의해 뷰에 "고정"됩니다.

홀더를 사용하는 리스너에서 이벤트를 보내는보기에서 홀더를 가져와야합니다. 이를 위해 다음 코드는 작동합니다 :

private View.OnFocusChangeListener FirstNameFocusChangeListener(final int position) { 
    return new View.OnFocusChangeListener() { 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus){ 
       ViewHolder holder = (ViewHolder) v.getTag(); 
       viewID = holder.position; 
      } 
     } 
    }; 
} 
관련 문제