按钮在点击RecycleView时没有反应

时间:2017-04-17 11:12:08

标签: android android-recyclerview

我创建了一个简单的RecycleView组件。然后为该组件创建一个新活动。在一行中,我有TextViewButton。我想要做的是改变对象中的某些东西,这些东西被放入了令人兴奋的一排。

首先我初始化了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
  3. ============================== 的更新

    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");
        }
    

1 个答案:

答案 0 :(得分:0)

在回收审核中,您必须明确为视图设置onClickListener。 它没有任何默认方法来处理listview等点击事件。

您需要在WashLocationViewHolder

中为按钮设置Onclick监听器

您将在那里收到点击事件。从视图持有者,您可以使用界面将事件发送回您的片段或活动。

如果您需要进一步的帮助,请在评论中提及。我会为你提供一些样品。

  

如何获取放入一行的对象?

要执行此操作,您可以使用布局中的setTag(Object)方法或要为其提供单击侦听器的按钮将对象设置为标记。然后,您可以使用视图中的getTag()方法获取对象。

希望这有帮助。