2017-04-17 11 views
0

簡単なRecycleViewコンポーネントを作成しました。次に、そのコンポーネントの新しいアクティビティを作成します。ある行には私はTextViewButtonがあります。私がやりたいことは、胸を張って1列に入れられた物の中の何かを変えることです。リサイクルビューでボタンをクリックしても反応しません

まず私はButtonを初期化:

public class RecycleViewAllWashesActivity extends Activity { 
    private Button isFavorite; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.row_recycleview); 
     isFavorite = (Button) findViewById(R.id.addToFav); 
     isFavorite.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.w("myApp", String.valueOf(v.getId())); 
       int id = v.getId(); 
      } 
     }); 
    } 
} 

RecycleViewのアダプタは次のようになります。

@Override 
    public MyAdapter.WashLocationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     Context context = parent.getContext(); 
     LayoutInflater inflater = LayoutInflater.from(context); 

     // Inflate the custom layout 
     View view = inflater.inflate(R.layout.row_recycleview, parent, false); 

     // Return a new holder instance 
     WashLocationViewHolder viewHolder = new WashLocationViewHolder(view); 
     return viewHolder; 
    } 

    // Involves populating data into the item through holder 
    @Override 
    public void onBindViewHolder(MyAdapter.WashLocationViewHolder viewHolder, int position) { 
     // Get the data model based on position 
     WashLocation w = washLocations.get(position); 
     String info = w.getWashName(); 

     // Set item views based on your views and data model 
     TextView textView = viewHolder.info; 
     textView.setText(info); 

     Integer fav = w.getFav(); 
     Boolean favorite = fav == 1 ? true : false; 
     Button addToFav = viewHolder.favorite; 
     addToFav.setText(favorite == true ? "Usuń z ulubionych" : "Dodaj do ulubionych"); 
    } 

質問:に入れたオブジェクトを取得する方法

  1. 1列?
  2. Button(上記のコード)をクリックしても反応しません。設定されたブレークポイントにも反応しませんか? - >]ボタンをクリックしながら、私が見るコンソールの事は次のとおりです。 04-17 13:11:00.137 7671-7671/com.example.micha.locationtest D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN

=========================== === 更新:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ItemHolder> { 

    private List<WashLocation> washLocations; 
    private OnItemClickListener onItemClickListener; 
    private LayoutInflater layoutInflater; 

    public MyAdapter(List<WashLocation> washLocations, Context context) { 
     layoutInflater = LayoutInflater.from(context); 
     this.washLocations = washLocations; 
    } 

    @Override 
    public MyAdapter.ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = layoutInflater.inflate(R.layout.row_recycleview, parent, false); 
     return new ItemHolder(itemView, this); 
    } 

    @Override 
    public void onBindViewHolder(MyAdapter.ItemHolder holder, int position) { 
     // Get the data model based on position 
     WashLocation w = washLocations.get(position); 
     String info = w.getWashName(); 

     // Set item views based on your views and data model 
     TextView textView = holder.info; 
     textView.setText(info); 

     Integer fav = w.getFav(); 
     Boolean favorite = fav == 1 ? true : false; 
     Button addToFav = holder.favorite; 
     addToFav.setText(favorite == true ? "Usuń z ulubionych" : "Dodaj do ulubionych"); 
    } 

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

    public void setOnItemClickListener(OnItemClickListener listener) { 
     onItemClickListener = listener; 
    } 

    public OnItemClickListener getOnItemClickListener() { 
     return onItemClickListener; 
    } 

    public interface OnItemClickListener { 
     public void onItemClick(ItemHolder item, int position); 
    } 

    /* public void add(int location, String iName){ 
     itemsName.add(location, iName); 
     notifyItemInserted(location); 
    } 

    public void remove(int location){ 
     if(location >= itemsName.size()) 
      return; 

     itemsName.remove(location); 
     notifyItemRemoved(location); 
    }*/ 

    public static class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     private MyAdapter parent; 
     TextView textItemName; 
     public TextView info; 
     public Button favorite; 

     public ItemHolder(View itemView, MyAdapter parent) { 
      super(itemView); 
      itemView.setOnClickListener(this); 
      this.parent = parent; 
      info = (TextView) itemView.findViewById(R.id.textView); 
      favorite = (Button) itemView.findViewById(R.id.addToFav); 
     } 

     public void setItemName(CharSequence name) { 
      textItemName.setText(name); 
     } 

     public CharSequence getItemName() { 
      return textItemName.getText(); 
     } 

     @Override 
     public void onClick(View v) { 
      final OnItemClickListener listener = parent.getOnItemClickListener(); 
      if (listener != null) { 
       listener.onItemClick(this, getPosition()); 
      } 
     } 
    } 
} 

アクティビティクラス:

final DataBaseHelper dataBaseHelper = new DataBaseHelper(getApplicationContext()); 
washLocations = dataBaseHelper.getWashLocation(); 

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
mAdapter = new MyAdapter(washLocations, this); 
mAdapter.setOnItemClickListener(this); 
mRecyclerView.setAdapter(mAdapter); 
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 



@Override 
    public void onItemClick(MyAdapter.ItemHolder item, int position) { 
     Log.d("myApp", "fdsgfds"); 
    } 
+0

エラーコードはありません。 2番目の質問 – bielas

+1

で、この簡単なrecyclerViewの例をチェックしてください。私はあなたが実装を誤解していると思います... http://android-er.blogspot.de/2015/07/simple-recyclerview-example.html – Opiatefuchs

+0

私はあなたを正しく取得しませんでした。 isFavoriteボタンをクリックしますか? – Raghavendra

答えて

0

リサイクルのレビューでは、あなたが明示的にビューのonClickListenerを設定する必要があります。 これには、listviewのようなクリックイベントを処理するためのデフォルトのメソッドはありません。

あなたは、あなたがそこにクリックイベントを受信しますあなたのWashLocationViewHolder

であなたのボタンのonclickリスナーを設定する必要があります。ビューホルダーから、インターフェースを使用して、フラグメントまたはアクティビティーにイベントを送り返すことができます。

これについてさらに助けが必要な場合は、コメントに記載してください。私はいくつかのサンプルを提供します。

1つの行に入れられたオブジェクトを取得するにはどうすればよいですか?

あなたはレイアウトの setTag(Object)方法やそのためにあなたがクリックリスナーを提供されるボタンを使用して、タグなどのオブジェクトを設定することができますこれを行うにしてください。次に、ビューから getTag()メソッドを使用してオブジェクトを取得できます。

これが役に立ちます。

関連する問題