2017-04-17 24 views
0

我已經創建了一個簡單的RecycleView組件。然後爲該組件創建一個新的活動。在一行中,我有一個TextViewButton。我想要做的就是改變放在激動人心的一排物體上的東西。按鈕不會在點擊RecycleView時發生反應

首先我初始化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. 如何獲得其投入對象一排?
  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

theres沒有錯誤代碼。在第二個問題中告訴你 – bielas

+1

看看這個簡單的recyclerView示例。我猜你誤解了實現... http://android-er.blogspot.de/2015/07/simple-recyclerview-example.html – Opiatefuchs

+0

我沒有正確地理解你..你能告訴我什麼時候應該發生什麼你點擊isFavorite按鈕? – Raghavendra

回答

0

在回收審查必須爲意見明確設置的onClickListener。 它沒有任何默認方法來處理像listview這樣的點擊事件。

您需要設置一個onclick偵聽你的按鈕在你WashLocationViewHolder

您將有獲得點擊的事件。從查看者處,您可以使用界面將事件發送回您的片段或活動。

如果您需要進一步的幫助,請在評論中提及。我會爲你提供一些樣品。

如何獲取放入一行的對象?

要做到這一點,您可以使用佈局中的setTag(Object)方法或您將爲其提供點擊偵聽器的按鈕將對象設置爲標籤。然後,您可以從視圖中使用getTag()方法獲取對象。

希望這會有所幫助。