2017-04-17 57 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()方法获取对象。

希望这会有所帮助。