2017-10-14 11 views
0

私はアンドロイドプログラミングであまりよくありません。私はcardviewとrecyclerviewでこのレイアウトを行うことができます。EditTextとRecyclerviewのCardview

しかし、私はEDITTEXTと、各カードの2リスナーを持っている必要があります。 OnFocusChangeリスナーとOnTextChangeリスナー。そして私は各editTextのテキストを取得しなければなりません。 私は何をしなければなりませんか? これは私の現在のコードです:

オブジェクト:

public class unitObject { 

private String mtitle; 
private String mhint; 

unitObject(String title, String hint){ 
    mtitle=title; 
    mhint=hint; 
} 
public String getMtitle() { 
    return mtitle; 
} 

public String getMhint() { 
    return mhint; 
} 

public void setMtitle(String mtitle) { 
    this.mtitle = mtitle; 
} 

public void setMhint(String mhint) { 
    this.mhint = mhint; 
} 
} 

リサイクラーアダプタ:

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.DataObjectHolder> { 
private static String LOG_TAG = "MyRecyclerViewAdapter"; 
private ArrayList<unitObject> mDataset; 
private static MyClickListener myClickListener; 

public static class DataObjectHolder extends RecyclerView.ViewHolder 
     implements View 
     .OnClickListener { 
    TextView title; 
    TextView ET_hint; 
    String content; 

    public DataObjectHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.textView); 
     ET_hint = (TextView) itemView.findViewById(R.id.editText); 
     Log.i(LOG_TAG, "Adding Listener"); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     myClickListener.onItemClick(getAdapterPosition(), v); 
    } 
} 



public MyRecyclerViewAdapter(ArrayList<unitObject> myDataset) { 
    mDataset = myDataset; 
} 

@Override 
public DataObjectHolder onCreateViewHolder(ViewGroup parent, 
              int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_view_row, parent, false); 

    DataObjectHolder dataObjectHolder = new DataObjectHolder(view); 
    return dataObjectHolder; 
} 

@Override 
public void onBindViewHolder(DataObjectHolder holder, int position) { 
    holder.title.setText(mDataset.get(position).getMtitle()); 
    holder.ET_hint.setHint(mDataset.get(position).getMhint()); 
} 



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

public interface MyClickListener { 
    public void onItemClick(int position, View v); 
} 

クラス

public class classic_conversion extends AppCompatActivity { 

private RecyclerView mRecyclerView; 
private RecyclerView.Adapter mAdapter; 
private RecyclerView.LayoutManager mLayoutManager; 

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

    mRecyclerView = findViewById(R.id.my_recycler_view); 
    mRecyclerView.setHasFixedSize(true); 
    mLayoutManager = new LinearLayoutManager(this); 
    mRecyclerView.setLayoutManager(mLayoutManager); 
    mAdapter = new MyRecyclerViewAdapter(getDataSet()); 
    mRecyclerView.setAdapter(mAdapter); 
} 
private ArrayList<unitObject> getDataSet() { 
    ArrayList results = new ArrayList<unitObject>(); 
    results.add(new unitObject("Title 1","hint 1")); 
    results.add(new unitObject("Title 2","hint 2")); 
    results.add(new unitObject("Title 3","hint 3")); 
    return results; 
} 
} 

ありがとうございます!

+0

EditTextには対応していませんか?エッセンスは、テキストであり、他は、パラマウント・ロスです。 TítuloはTextViewを実行します。 TextView ET_hint; –

+0

レイアウトにeditTextが追加されました。しかし、コードにeditTextリスナーを追加する方法はわかりません。あなたの返信ありがとう – Damien

答えて

1

リスナーEDITTEXTの場合:リスナーのフォーカスの変更については

yourEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      //BEFORE TEXT CHANGED 
     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
     // WHILE TEXT IS CHANGE 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
      //AFTER TEXT CHANGED (LIKE YOU PRESS ENTER AFTER TYPING) 

     } 
    }); 

yourEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View view, boolean hasFocus) { 

      if (hasFocus){ 
       //DO WHAT YOU NEED WHEN editText HAS FOCUS 
      } 
      else { 
       //DO WHAT YOU NEED WHEN editText HAS NO FOCUS 
      } 

     } 
    }); 

私は本当にこれがあなたを助けてくれることを願っています。

+0

あなたの返信ありがとうございます。私はリスナーがあなたが書いたものであることを知っています。しかし、どこに置く必要があるのか​​分かりません。私はアダプタを持っているので、テキストが変更されたときに私の主なアクティビティで知りたいのは – Damien

+0

@オーバーライド public void onBindViewHolder(DataObjectHolder holder、int position){ holder.title.setText(mDataset.get(position).getMtitle )); holder.ET_hint.setHint(mDataset.get(position).getMhint()); } –

+0

ありがとう! editTextテキストが変更されたときに、メインアクティビティでeditTextの値を取得する必要があります。インターフェイスを使用する必要がありますか?ありがとうございます – Damien

関連する問題