スピナーを含むrecylerviewで、スピナーにアイテムを動的に追加する方法(特定の位置のみ)...今、私が子供用スピナーを更新するとき、recylerviewのすべてのスピナーは更新されています。その特定の位置(recylerviewの)のスピナーのみを更新してください。私はこのアダプタを呼び出していた場所からrecyclerviewのスピナーを更新
public class OfferRideRegularListViewAdapter extends RecyclerView.Adapter<OfferRideRegularListViewAdapter.MyViewHolder> implements SelectTimeFragment.SelectedTimeListener
{
LayoutInflater inflater;
CustomSpinnerAdapter leavingTimeAdpater,returningTimneAdpater;
ArrayList<CommonListViewItems> leavingTimeItemsList,returningTimeItemsList;
List<String> checkedItemsList;
Context context;
View convertView;
private static final int LEAVING_TIMEPICKER_FRAGMENT = 2;
private static final int RETURNING_TIMEPICKER_FRAGMENT = 3;
private Fragment fragment;
private int selectedDayPosition;
private ArrayList<CommonListViewItems> leavingTimeOfDayList,returningTimeOfDayList;
private ViewGroup viewGroup;
private int TIMEPICKER_FRAGMENT=0;
private CommonListViewItems items;
RecylerView recyclerView;
public OfferRideRegularListViewAdapter(Context context,ArrayList<CommonListViewItems> leavingTimeItemsList,ArrayList<CommonListViewItems> returningTimeItemsList,RecylerView recyclerView) {
this.context=context;
this.recyclerView = recyclerView;
inflater = LayoutInflater.from(context);
this.leavingTimeItemsList = leavingTimeItemsList;
this.returningTimeItemsList = returningTimeItemsList;
checkedItemsList = Arrays.asList(context.getResources().getStringArray(R.array.week_days));
leavingTimeAdpater=new CustomSpinnerAdapter(context,R.layout.common_listview_item,this.leavingTimeItemsList);
returningTimneAdpater = new CustomSpinnerAdapter(context,R.layout.common_listview_item,this.returningTimeItemsList);
leavingTimeOfDayList = new ArrayList<CommonListViewItems>();
for (int i=0;i<checkedItemsList.size();i++)
{
items = new CommonListViewItems();
items.setlistItem(leavingTimeItemsList.get(0).getlistItem());
leavingTimeOfDayList.add(items);
}
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.layout_offer_ride_regular_list_items, parent, false);
convertView = itemView;
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.checkDay.setText(checkedItemsList.get(position));
holder.spinnerLeavingTime.setAdapter(leavingTimeAdpater);
holder.spinnerReturningTime.setAdapter(returningTimneAdpater);
}
@Override
public int getItemCount() {
return checkedItemsList.size();
}
public int getCount() {
return checkedItemsList.size();
}
public void showSelectTimeDialog(int TIMEPICKER_FRAGMENT)
{
this.TIMEPICKER_FRAGMENT = TIMEPICKER_FRAGMENT;
FragmentManager fm = ((MainActivity)context).getFragmentManager();
SelectTimeFragment selectTimeFragment = new SelectTimeFragment();
selectTimeFragment.setSelectedTimeListener(this);
selectTimeFragment.show(fm,"TimePicker");
}
public class MyViewHolder extends RecyclerView.ViewHolder
{
public CheckBox checkDay;
public Spinner spinnerLeavingTime;
public Spinner spinnerReturningTime;
public MyViewHolder(View view) {
super(view);
checkDay=(CheckBox)view.findViewById(R.id.checkedDay);
spinnerLeavingTime=(Spinner)view.findViewById(R.id.spinner_leavingTime);
spinnerReturningTime=(Spinner)view.findViewById(R.id.spinner_returningTime);
spinnerLeavingTime.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (position == (leavingTimeAdpater.getCount() - 1)) {
hideKeyboard(view);
selectedDayPosition = getAdapterPosition();
showSelectTimeDialog(LEAVING_TIMEPICKER_FRAGMENT);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
@Override
public String onTimeSelected(String selectedTime) {
updateChildSpinnerList(selectedTime);
return null;
}
@Override
public void onTimeNotSelected(boolean noTimeSelected) {
}
private void updateChildSpinnerList(String selectedTime)
{
if (selectedTime!=null)
{
CommonListViewItems items;
switch (TIMEPICKER_FRAGMENT)
{
case LEAVING_TIMEPICKER_FRAGMENT:
{
items = new CommonListViewItems();
items.setlistItem(selectedTime);
items = new CommonListViewItems();
items.setlistItem("Change...");
leavingTimeOfDayList.remove(selectedDayPosition);
leavingTimeOfDayList.add(selectedDayPosition, items);
Spinner spinner= (Spinner) recyclerView.getChildAt(selectedDayPosition).findViewById(R.id.spinner_leavingTime);
notifyItemChanged(selectedDayPosition);
}
}
}
else
{
}
}
}
フラグメント:(recylerviewでこれらのスピナーを膨張さ)私のアダプタである後
offerRideRegularListViewAdapter = new OfferRideRegularListViewAdapter(getActivity(),getLeavingTimeList(),getReturningTimeList(),listEachDay);
listEachDay.setAdapter(offerRideRegularListViewAdapter);
は次のようにCustomSpinnerAdpaterです:
public class CustomSpinnerAdapter extends ArrayAdapter<CommonListViewItems> {
CommonListViewItems servicesItem;
Context context;
int layoutId;
private ArrayList<CommonListViewItems> itemsArrayList;
public CustomSpinnerAdapter(Context context, int layoutId, ArrayList<CommonListViewItems> itemsArrayList)
{
super(context,layoutId,itemsArrayList);
this.context = context;
this.layoutId=layoutId;
this.itemsArrayList=itemsArrayList;
}
@Override
public int getCount() {
return itemsArrayList.size();
}
@Override
public CommonListViewItems getItem(int position) {
return itemsArrayList.get(position);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomView(position,convertView,parent);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
return getCustomView(position,convertView,parent);
}
private View getCustomView(int position, View convertView, ViewGroup parent)
{
final ViewHolder holder;
if (convertView==null)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(layoutId,parent,false);
holder=new ViewHolder();
servicesItem = new CommonListViewItems();
holder.textView=(TextView)convertView.findViewById(R.id.tv_listItems);
convertView.setTag(holder);
}
else
{
holder=(ViewHolder)convertView.getTag();
}
final CommonListViewItems servicesItem =(CommonListViewItems)itemsArrayList.get(position);
holder.textView.setText(servicesItem.getlistItem());
return convertView;
}
private class ViewHolder
{
public TextView textView;
}
}
CommonListViewItemsクラス:
public class CommonListViewItems {
String listItem;
public String getlistItem() {
return listItem;
}
public void setlistItem(String listItem) {
this.listItem = listItem;
}
}
recyclerviewは次のようになります。
と私はTimePickerDialogから複数の項目(時間)を追加したいのですが、追加項目は、各スピナーに追加取得されたスピナーをクリックすることで、Iあなたが同じspinnerAdapteの複数のインスタンスを必要とする
私は本当に試してみました。しかし、あなたのコードはとても難しく、エラーを見つけることができないのは不思議ではありません。しかし、私はすべてのあなたの意見が同じスピナーアダプターと同じデータを共有しているため、これが信じています。 –
今すぐお試しください。私は不要なコードを削除しました。今すぐお試しください...本当に必要です.. –
ViewHolderごとに1つのスピナー・アダプター・インスタンスと1つのスピナー・データを用意してください。この方法で彼らはお互いに独立しています –