如何通过另一类的点击方法传递一类的值

问题描述 投票:0回答:2

我也有2个Adapter类及其Object类:

第一个适配器类是:

public class UpcomingAdpter extends  RecyclerView.Adapter<UpcomingAdpter.ItemRowHolder>  {

private ArrayList<UpcomingObject> itemList;


private Context context;




public UpcomingAdpter(ArrayList<UpcomingObject> itemList, Context context){
    this.itemList = itemList;
    this.context = context;
}



@Override
public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.upcominglayout, null);
    ItemRowHolder mh = new ItemRowHolder(v);
    return mh;
}




@Override
public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) {


    final String sectionName = itemList.get(i).getDate();


    final ArrayList<SingleItemModelForUpcoming> singleSectionItems = itemList.get(i).getNamesList();
    final ArrayList<SingleItemforPhoneNumbers> singleSectionItemsForPhoneNumber = itemList.get(i).getPhoneList();

    itemRowHolder.date.setText(sectionName);

    AdapterForNamesListInUpcoming itemListDataAdapter = new AdapterForNamesListInUpcoming(context, singleSectionItemsForPhoneNumber, singleSectionItems);
   AdapterForNamesListInUpcoming itemListDataAdapterSecond = new AdapterForNamesListInUpcoming(context, singleSectionItemsForPhoneNumber, singleSectionItems);

    itemRowHolder.recycler_view_list.setHasFixedSize(true);
    itemRowHolder.recycler_view_list.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
    itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapter);
   itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapterSecond);


    itemRowHolder.recycler_view_list.setNestedScrollingEnabled(false);

    itemRowHolder.recycler_view_list.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("dd","here is me");
        }
    });





}



@Override
public int getItemCount() {
    return (null != itemList ? itemList.size() : 0);
}


public class ItemRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected TextView date;

    protected RecyclerView recycler_view_list;




    public ItemRowHolder(View view)  {
        super(view);

        this.date = (TextView) view.findViewById(R.id.date);
        this.recycler_view_list = (RecyclerView) view.findViewById(R.id.recycler_view_list);

        view.setOnClickListener(this);
}


    @Override
    public void onClick(View v) {
        String finaldate = date.getText().toString();
        Log.d("Date", "now date us "+finaldate);

    }
}
}

为此的对象类是:

public class UpcomingObject {


private String Date;

private ArrayList<SingleItemModelForUpcoming> NamesList;
private ArrayList<SingleItemforPhoneNumbers> PhoneList;




public UpcomingObject() {

}


public UpcomingObject(String Date, ArrayList<SingleItemModelForUpcoming> NamesList, ArrayList<SingleItemforPhoneNumbers> PhoneList) {
    this.Date = Date;

    this.NamesList = NamesList;
    this.PhoneList = PhoneList;





}


public String getDate() {
    return Date;
}

public void setDate(String date) {
    Date = date;
}

public ArrayList<SingleItemModelForUpcoming> getNamesList() {
    return NamesList;
}

public void setNamesList(ArrayList<SingleItemModelForUpcoming> namesList) {
    NamesList = namesList;
}

public ArrayList<SingleItemforPhoneNumbers> getPhoneList() {
    return PhoneList;
}

public void setPhoneList(ArrayList<SingleItemforPhoneNumbers> phoneList) {
    PhoneList = phoneList;
}


     }

此布局是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginLeft="50dp"
xmlns:app="http://schemas.android.com/apk/res-auto">


<TextView
    android:id="@+id/date"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fontFamily="@font/gothic"
    android:layout_marginTop="10dp"
    android:textColor="#000"
    android:text="10-10-2019"/>
<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_marginTop="40dp"
    android:id="@+id/takedate"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="20dp"
        android:orientation="vertical" />




</RelativeLayout>

第二个适配器类是:

public class AdapterForNamesListInUpcoming extends RecyclerView.Adapter<AdapterForNamesListInUpcoming.SingleItemRowHolder> {

private List<SingleItemModelForUpcoming> itemsList;
private List<SingleItemforPhoneNumbers> itemforPhoneNumbers;
private Context mContext;


public AdapterForNamesListInUpcoming(Context context,  List<SingleItemforPhoneNumbers> itemforPhoneNumbers , List<SingleItemModelForUpcoming> itemsList ) {
    this.itemsList = itemsList;
    this.itemforPhoneNumbers = itemforPhoneNumbers;
    this.mContext = context;



}






@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.upcomingclientlistlayout, null);
    SingleItemRowHolder mh = new SingleItemRowHolder(v);
    return mh;

}

@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {

    SingleItemModelForUpcoming singleItem = itemsList.get(i);

   SingleItemforPhoneNumbers singleItemforPhoneNumbers = itemforPhoneNumbers.get(i);

    holder.nameofclient.setText(singleItem.getName());

    holder.phoneNumber.setText(singleItemforPhoneNumbers.getPhoneNumber());



}

@Override
public int getItemCount() {
    return (null != itemsList ? itemsList.size() : 0);
}

public class SingleItemRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected TextView nameofclient , phoneNumber, date;



    public SingleItemRowHolder(View view) {
        super(view);

        this.nameofclient = (TextView) view.findViewById(R.id.nameofclient);
        this.phoneNumber = (TextView)view.findViewById(R.id.phoneNumber);


        view.setOnClickListener(this);



    }


    @Override
    public void onClick(View v) {
        Intent UpcomingDetailPage = new Intent(v.getContext(), com.allwaseet.spaservshop.UpcomingDetailsPage.UpcomingDetailPage.class);
        v.getContext().startActivity(UpcomingDetailPage);
        String finalPhoneNumber = phoneNumber.getText().toString();
        Log.d("PhoneNumber from databse ","phone Number is "+finalPhoneNumber);


        SharedPreferences.Editor PhoneNumberEditor;
        SharedPreferences PhoneNumberSharedPreference;


        PhoneNumberSharedPreference = mContext.getSharedPreferences("SelectedPhoneNumber", Context.MODE_PRIVATE);
        PhoneNumberEditor = PhoneNumberSharedPreference.edit();
        PhoneNumberEditor.putString("SelectedPhoneNumber",finalPhoneNumber);
        PhoneNumberEditor.commit();

        Log.d("PhoneNumber from databse ","phone Number is "+finalPhoneNumber);



        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.upcominglayout, null, true);
        TextView textView = (TextView)view.findViewById( R.id.date );
        String finaldate = textView.getText().toString();
        Log.d("ss","date     is "+finaldate);



        SharedPreferences.Editor DateEditor;
        SharedPreferences DateSharedPreference;


        DateSharedPreference = mContext.getSharedPreferences("DateInUpcoming", Context.MODE_PRIVATE);
        DateEditor = DateSharedPreference.edit();
        DateEditor.putString("DateInUpcoming",finaldate);
        DateEditor.commit();
       // return view;





    }
}

}

为此的对象类是:

    public class SingleItemModelForUpcoming {


    private String name;


    public SingleItemModelForUpcoming(String name) {
        this.name = name;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

此布局为:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="550dp"
android:layout_marginTop="40dp"
android:layout_height="150dp"
android:layout_marginLeft="50dp"
android:paddingBottom="30dp"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">



<RelativeLayout
    android:layout_width="560dp"
    android:background="@drawable/upcomingandhistorybackground"
    android:layout_height="100dp">



<TextView
    android:id="@+id/time"
    android:layout_width="wrap_content"
    android:text="2:30"
    android:layout_marginTop="35dp"
    android:textSize="25dp"
    android:fontFamily="@font/gothic"
    android:layout_marginLeft="20dp"
    android:textColor="#fff"
    android:layout_height="wrap_content" />


<View
    android:layout_width="1dp"
    android:layout_marginLeft="80dp"
    android:layout_marginTop="15dp"
    android:layout_height="70dp"
    android:background="#fff"
    />

<TextView
    android:id="@+id/nameofclient"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Name"
    android:layout_marginLeft="100dp"
    android:layout_marginTop="35dp"
    android:textColor="#fff"
    android:fontFamily="@font/gothic"
    android:textSize="20dp"/>


    <!--Not in use-->

    <TextView
        android:id="@+id/phoneNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="4dp"
        android:textColor="#fff"
        android:text="rr"
        android:fontFamily="@font/gothic"
        android:textSize="20dp"/>

    <!--Not in use-->


    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="40dp"
    android:layout_marginLeft="495dp"
    android:src="@drawable/rightarrow"/>

现在,我想要的是,当我单击第二个适配器类中存在的项目时,我想获取第一个适配器类中指定的日期。我怎样才能做到这一点。

This is the example picture

例如:当我单击粉红色部分或单元格时,我也应该获得日期。但是问题是在另一个适配器类中指定了日期

任何帮助将不胜感激。

java android
2个回答
0
投票

使用此

public class AdapterForNamesListInUpcoming extends RecyclerView.Adapter<AdapterForNamesListInUpcoming.SingleItemRowHolder> {

private List<SingleItemModelForUpcoming> itemsList;
private List<SingleItemforPhoneNumbers> itemforPhoneNumbers;
private ArrayList<UpcomingObject> item;
private Context mContext;


public AdapterForNamesListInUpcoming(Context context,ArrayList<UpcomingObject> item,  List<SingleItemforPhoneNumbers> itemforPhoneNumbers , List<SingleItemModelForUpcoming> itemsList ) {
    this.itemsList = itemsList;
    this.item = item;
    this.itemforPhoneNumbers = itemforPhoneNumbers;
    this.mContext = context;
}


@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.upcomingclientlistlayout, null);
    SingleItemRowHolder mh = new SingleItemRowHolder(v);
    return mh;

}

@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {

    SingleItemModelForUpcoming singleItem = itemsList.get(i);

   SingleItemforPhoneNumbers singleItemforPhoneNumbers = itemforPhoneNumbers.get(i);

    holder.nameofclient.setText(singleItem.getName());

    holder.phoneNumber.setText(singleItemforPhoneNumbers.getPhoneNumber());
}

@Override
public int getItemCount() {
    return (null != itemsList ? itemsList.size() : 0);
}

public class SingleItemRowHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    protected TextView nameofclient , phoneNumber, date;
    public SingleItemRowHolder(View view) {
        super(view);

        this.nameofclient = (TextView) view.findViewById(R.id.nameofclient);
        this.phoneNumber = (TextView)view.findViewById(R.id.phoneNumber);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // get data of first adapter
        UpcomingObject up = item.get(getAdapterPosition);

        Intent UpcomingDetailPage = new Intent(v.getContext(), com.allwaseet.spaservshop.UpcomingDetailsPage.UpcomingDetailPage.class);
        v.getContext().startActivity(UpcomingDetailPage);
        String finalPhoneNumber = phoneNumber.getText().toString();
        Log.d("PhoneNumber from databse ","phone Number is "+finalPhoneNumber);

        SharedPreferences.Editor PhoneNumberEditor;
        SharedPreferences PhoneNumberSharedPreference;

        PhoneNumberSharedPreference = mContext.getSharedPreferences("SelectedPhoneNumber", Context.MODE_PRIVATE);
        PhoneNumberEditor = PhoneNumberSharedPreference.edit();
        PhoneNumberEditor.putString("SelectedPhoneNumber",finalPhoneNumber);
        PhoneNumberEditor.commit();

        Log.d("PhoneNumber from databse ","phone Number is "+finalPhoneNumber);

        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.upcominglayout, null, true);
        TextView textView = (TextView)view.findViewById( R.id.date );
        String finaldate = textView.getText().toString();
        Log.d("ss","date     is "+finaldate);

        SharedPreferences.Editor DateEditor;
        SharedPreferences DateSharedPreference;


        DateSharedPreference = mContext.getSharedPreferences("DateInUpcoming", Context.MODE_PRIVATE);
        DateEditor = DateSharedPreference.edit();
        DateEditor.putString("DateInUpcoming",finaldate);
        DateEditor.commit();
       // return view;
    }
  }
}

0
投票

您可以使用Intent在按钮或任何项目的单击事件上将数据从一个类传递到另一类,因此您可以做的是将第一类的数据存储到Shared preference中,然后将数据传递到键值对的形式如下:

public class AdapterForNamesListInUpcoming extends 
RecyclerView.Adapter<AdapterForNamesListInUpcoming.SingleItemRowHolder> {

private List<SingleItemModelForUpcoming> itemsList;
private List<SingleItemforPhoneNumbers> itemforPhoneNumbers;
private ArrayList<UpcomingObject> item;
private Context ctx;


public AdapterForNamesListInUpcoming(Context 
context,ArrayList<UpcomingObject> item,  List<SingleItemforPhoneNumbers> 
itemforPhoneNumbers , List<SingleItemModelForUpcoming> itemsList ) {
this.itemsList = itemsList;
this.item = item;
this.itemforPhoneNumbers = itemforPhoneNumbers;
this.ctx = context;
}


@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = 
LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.upcomingclientlistlayout, null);
SingleItemRowHolder rh = new SingleItemRowHolder(v);
return rh;

}

@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {

 SingleItemModelForUpcoming singleItem = itemsList.get(i);

SingleItemforPhoneNumbers singleItemforPhoneNumbers = 
itemforPhoneNumbers.get(i);

holder.nameofclient.setText(singleItem.getName());

holder.phoneNumber.setText(singleItemforPhoneNumbers.getPhoneNumber());
}

@Override
public int getItemCount() {
return (null != itemsList ? itemsList.size() : 0);
 }

public class SingleItemRowHolder extends RecyclerView.ViewHolder implements 
View.OnClickListener {

protected TextView nameofclient , phoneNumber, date;
public SingleItemRowHolder(View view) {
    super(view);

    this.nameofclient = (TextView) view.findViewById(R.id.nameofclient);
    this.phoneNumber = (TextView)view.findViewById(R.id.phoneNumber);
    view.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
    // get data of first adapter
    UpcomingObject up = item.get(getAdapterPosition);

    Intent UpcomingDetailPage = new Intent(v.getContext(), 
  com.allwaseet.spaservshop.UpcomingDetailsPage.UpcomingDetailPage.class);
    v.getContext().startActivity(UpcomingDetailPage);
    String finalPhoneNumber = phoneNumber.getText().toString();
    Log.d("PhoneNumber from databse ","phone Number is "+finalPhoneNumber);

    SharedPreferences.Editor PhoneNumberEditor;
    SharedPreferences PhoneNumberSharedPreference;

    PhoneNumberSharedPreference = 
 ctx.getSharedPreferences("SelectedPhoneNumber", Context.MODE_PRIVATE);
    PhoneNumberEditor = PhoneNumberSharedPreference.edit();
    PhoneNumberEditor.putString("SelectedPhoneNumber",finalPhoneNumber);
    PhoneNumberEditor.commit();

    Log.d("PhoneNumber from databse ","phone Number is "+finalPhoneNumber);

    LayoutInflater inflater = LayoutInflater.from(ctx);
    View view = inflater.inflate(R.layout.upcominglayout, null, true);
    TextView textView = (TextView)view.findViewById( R.id.date );
    String finaldate = textView.getText().toString();
    Log.d("ss","date     is "+finaldate);

    SharedPreferences.Editor DateEditor;
    SharedPreferences DateSharedPreference;


    DateSharedPreference = ctx.getSharedPreferences("DateInUpcoming", 
    Context.MODE_PRIVATE);
    DateEditor = DateSharedPreference.edit();
    DateEditor.putString("DateInUpcoming",finaldate);
    DateEditor.commit();
   // return view;
    }
  }
 }
© www.soinside.com 2019 - 2024. All rights reserved.