2017-03-21 19 views
0

Iは、名前とバランスのフィールドが二つの異なる配列から来ているrecyclerView、RecyclerView EditTextから値を取得しますか?

ここ

image

に打たれています。 必要なのは、各行にEditTextフィールドがあることです。私は各行の各EditTextにアクセスする必要があります。それから値を取得し、totalはtotal textViewに表示されます。出来ますか?私はたくさん試しました。私はそれを得ていない。

私はここに私のクラスを付けています。

MainActivity

public class GroupCollectionFragment extends Fragment { 
String[] nameArray = {"Akhil","Mohan","Anoop","Syam","Athul","Anish","Anand","Prasad","Mani","Oommen" 
     ,"Akhil","Mohan","Anoop","Syam","Athul","Anish","Anand","Prasad","Mani","Oommen" 
     ,"Akhil","Mohan","Anoop","Syam","Athul","Anish","Anand","Prasad","Mani","Oommen"}; 
String[] balanceArray={"2354","6578","2345","34654","2542","2354","6578","2345","34654","2542" 
     ,"2354","6578","2345","34654","2542","2354","6578","2345","34654","2542" 
     ,"2354","6578","2345","34654","2542","2354","6578","2345","34654","2542"}; 
RecyclerView mRecyclerView; 
RecyclerView.Adapter mAdapter; 
LinearLayoutManager mLayoutManager; 
List<DataHolder> holderList=new ArrayList<DataHolder>(); 

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View rootview=inflater.inflate(R.layout.group_collection_layout,container,false); 
    mRecyclerView = (RecyclerView) rootview.findViewById(R.id.my_recycler_view); 
    mRecyclerView.setHasFixedSize(true); 
    mLayoutManager = new LinearLayoutManager(getContext()); 
    mRecyclerView.setLayoutManager(mLayoutManager); 
    setItems(); 
    mAdapter = new Adapter(holderList); 
    mRecyclerView.setAdapter(mAdapter); 
    return rootview; 
} 

private void setItems() { 

    for(int i=0;i<nameArray.length;i++){ 
     DataHolder item=new DataHolder(); 
     item.setDname(nameArray[i]); 
     item.setDbalance(balanceArray[i]); 
     holderList.add(item); 
    } 
} 

}

DataHolder

public class DataHolder { 

String dname,dbalance; 
public DataHolder(){ 
} 
public String getDname(){ 
    return dname; 
} 
public void setDname(String name){ 
    this.dname=name; 
} 
public String getDbalance(){ 
    return dbalance; 
} 
public void setDbalance(String balance){ 
    this.dbalance=balance; 
} 

}

アダプタ

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { 
private List<DataHolder> mDataSet; 

public static class ViewHolder extends RecyclerView.ViewHolder{ 
    private TextView anameTxtView,abalanceTxtView; 
    private EditText adepositEditText; 
    public ViewHolder(View v){ 
     super(v); 
     anameTxtView=(TextView)v.findViewById(R.id.nameTextView); 
     abalanceTxtView=(TextView)v.findViewById(R.id.balanceTextView); 
     adepositEditText=(EditText)v.findViewById(R.id.depositEditText); 
    } 
} 

public Adapter(List<DataHolder> myData){ 
    mDataSet=myData; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.row_main,parent,false); 
    ViewHolder vh=new ViewHolder(v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.anameTxtView.setText(mDataSet.get(position).getDname()); 
    holder.abalanceTxtView.setText(mDataSet.get(position).getDbalance()); 


} 

@Override 
public int getItemCount() { 
    return mDataSet.size(); 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

}

答えて

1

の下に使用します。 だから最初にすべてのあなたは、インターフェイス、

public interface OnEditTextChanged { 
    void onTextChanged(int position, String charSeq); 
} 

が次にあなたは、アダプタのコンストラクタでこれを含めるあまりにも必要

OnEditTextChangedインタフェースを追加する必要があります。お使いのアダプタのonBindViewHolderで

Adapter.javaで

private List<DataHolder> mDataSet; 
private OnEditTextChanged onEditTextChanged; 

public Adapter(List<DataHolder> myData, OnEditTextChanged onEditTextChanged) { 
    mDataSet = myData; 
    this.onEditTextChanged = onEditTextChanged; 
} 

テキストの変更のリスナーを設定し、オブジェクトをonEditTextChanged使用してフラグメントを伝える必要があります。

@Override 
public void onBindViewHolder(ViewHolder holder, final int position) { 
    holder.anameTxtView.setText(mDataSet.get(position).getDname()); 
    holder.abalanceTxtView.setText(mDataSet.get(position).getDbalance()); 

    holder.adepositEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {} 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      onEditTextChanged.onTextChanged(position, charSequence.toString()); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) {} 
    }); 
} 

あなたのフラグメントに値を保存し、あなたがそれらをしたい時はいつでもそれらを使用できるように、GroupCollectionFragmentに、この配列を追加します。

Integer[] enteredNumber = new Integer[1000]; 
あなたはファイル全体をしたい場合は、私に教えてくださいGroupCollectionFragment

mAdapter = new Adapter(holderList, new OnEditTextChanged() { 
     @Override 
     public void onTextChanged(int position, String charSeq) { 
      enteredNumber[position] = Integer.valueOf(charSeq); 
      updateTotalValue(); 
     } 
    }); 

private void updateTotalValue() { 
    int sum = 0; 
    for (int i = 0; i < 1000; i++) { 
     sum += enteredNumber[i]; 
    } 

    totalValue.setText(String.valueOf(sum)); 
} 

をあなたのコンストラクタの呼び出しを変更

。私はそれを書いてapkを作った、それはうまく動作します。

+0

ありがとうございます!私はそれを通って行くよ! :)また、私はそれが必要です – BraveHeart

+0

@BraveHeart 私の答えを受け入れるでしょうか? :テキストが削除されたときにD Adapter.java http://paste.ubuntu.com/24221230/ GroupCollectionFragment.java http://paste.ubuntu.com/24221236/ – MeHdi

+0

私はどこ、ヌル例外の問題を持っていますそれが空の場合にチェックする必要がありますか? –

1

EditTextに使用TextChangedListenerと行の順序/ユニークキーのIDと鍵と新しいHashMapに入力を保存します。

adeposit.addTextChangedListener(new TextWatcher() { 

    public void afterTextChanged(Editable s) {} 

    public void beforeTextChanged(CharSequence s, int start, 
           int count, int after) { 
    } 

public void onTextChanged(CharSequence s, int start, 
          int before, int count) { 
    // Save value her in HashMap 
    } 
}); 

HashMapから値を取得します。

3

キーボードの操作完了時に価値を得ることができます。必要なのは、設定することです

android:imeOptions="actionDone" 編集のテキストです。その後、私はあなたがEditTextsの1の数はあなたがあまりにも総数の変更をしたい変更されるたびに意味のコールバックを探していると思うのコード

adepositEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 
         // Do whatever you want here 

         return true; 
        } 
        return false; 

       }); 
関連する問題