我如何在单击按钮时获得Recyclerview的全部价值?

时间:2018-12-29 11:33:11

标签: android

public class MainActivity extends Activity implements 

GetDataContract.View,RecyclerItemClickListener {

    private Presenter mPresenter;

    RecyclerView recyclerView;

    LinearLayoutManager linearLayoutManager;

    CountryAdapter countryAdapter;

    EditText etEnterName;

    Button btAddItem;

    List<CountryRes> allCountriesEditValue;

    List<CountryRes> allCountriesData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        getView();
    }

    private void getView() {

        /*presentator */
        mPresenter = new Presenter(this);

        /*initiliaze of id*/

        recyclerView = (RecyclerView) findViewById(R.id.recycler);

        etEnterName = (EditText) findViewById(R.id.etEnterName);

        btAddItem = (Button) findViewById(R.id.btAddItem);

        linearLayoutManager = new LinearLayoutManager(this);

        /*initiliaze the arraylist*/

        allCountriesData=new ArrayList<>();

        recyclerView.setLayoutManager(linearLayoutManager);

        btAddItem.setOnClickListener(new AddButtonClick());
    }

    @Override

    public void onGetDataFailure(String message) {

        Log.d("Status", message);
    }


    @Override
    public void onGetDataSuccess(String message, List<CountryRes> 
allCountriesData) {

        /*add the value mannulay*/

        CountryRes countryRes = new CountryRes();

        countryRes.setName(etEnterName.getText().toString());

        allCountriesData.add(countryRes);
        countryAdapter = new CountryAdapter(getApplicationContext(),

        allCountriesData, (RecyclerItemClickListener) this);

        recyclerView.setAdapter(countryAdapter);

        /*set the data in the room*/
        AppDataBase database = AppDataBase.getAppDatabase(this);

        DataGenerator.with(database).generateCats(allCountriesData);

        Logger.displayCatsInLog(database.catDao().loadAll());

        countryAdapter.notifyDataSetChanged();


    }

    /*on item click*/
    @Override
    public void onDashBoardItemClick(String pos) {

        Bundle bundle = new Bundle();

        bundle.putString("TABVALUE", pos);

        Intent intent = new Intent(getApplicationContext(), 

        DynamicTabsActivity.class);

        intent.putExtras(bundle);

        startActivity(intent);
            }

    private class AddButtonClick implements View.OnClickListener {

        @Override

        public void onClick(View view) {

            mPresenter.getDataFromURL(getApplicationContext(), "");

        }
    }


}

类适配器

 public class CountryAdapter extends

    RecyclerView.Adapter<CountryAdapter.MyViewHolder> {

        private Context context;

        private List<CountryRes> list = new ArrayList<>();

        private List<CountryRes> list_edit = new ArrayList<>();

        private RecyclerItemClickListener onRecyclerItemClickListener;


        public CountryAdapter(Context context, List<CountryRes> list, 

    RecyclerItemClickListener onRecyclerItemClickListener) {

            this.context = context;

            this.list = list;

            this.onRecyclerItemClickListener = onRecyclerItemClickListener;


        }

        @Override

        public CountryAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,

    int viewType) {

            View layoutView;

            layoutView = 

    LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent,

    false);
            return new FooterViewHolder(layoutView, 

    onRecyclerItemClickListener);

        }

        @Override

        public void onBindViewHolder(CountryAdapter.MyViewHolder holder, int 

    position) {

            holder.tvCountryName.setText(list.get(position).getName());

        }

        @Override

        public int getItemCount() {

            return list.size();
        }

        public class MyViewHolder extends RecyclerView.ViewHolder {

            TextView tvCountryName;

            LinearLayout llListItem;

            public MyViewHolder(View itemView) {

                super(itemView);

                tvCountryName = (TextView) 

    itemView.findViewById(R.id.tv_country_name);

                llListItem = (LinearLayout) 

    itemView.findViewById(R.id.llListItem);

            }
        }

        private class FooterViewHolder extends MyViewHolder {

            public FooterViewHolder(View layoutView, final 

    RecyclerItemClickListener onRecyclerItemClickListener) {

                super(layoutView);

                llListItem.setOnClickListener(new View.OnClickListener() {

                    @Override

                    public void onClick(View v) {

                        if (onRecyclerItemClickListener != null) {

                            onRecyclerItemClickListener.onDashBoardItemClick(tvCountryName.getText().toS

    tring());

                        }
                    }

                });

            }

        }

    }

界面

    public interface RecyclerItemClickListener {

        void onDashBoardItemClick(String pos);
    }

2 个答案:

答案 0 :(得分:0)

情况1:在ViewHolder内,如果您需要准确了解被点击项目的位置,可以致电getAdapterPosition()

情况2:您只需要接收适配器的所有项目。很简单,使用getter方法将返回项目。

案例3:将信息发送到活动,首先在ViewHolder内创建视图的特定事件侦听器,然后事件触发(用户单击或其他),然后调用在适配器内部传递的接口方法,即在活动中实施。

如果您需要一个例子,请告诉我,我会做的。

答案 1 :(得分:0)

尝试这个,

Button button= (Button) findViewById(R.id.your_button_id);  
button.setOnClickListener( new OnClickListener() {

            @Override
            public void onClick(View v) {
                //create new ArrayList.
//ArrayList<CountryRes> showList=new ArrayList<>;
//now, put all stored data of a list in this arraylist.
showList.addAll(allCountriesData);
            }
        });