java如何在另一个垂直RecyclerView中实现水平RecyclerView
我想将一个水平的RecyclerView(InnerRecyclerView)放在另一个垂直的RecyclerView(OuterRecyclerView)中,并在两次单独的截取调用后将数据解析到其中。在第一次webservice调用之后,我能够成功地将数据解析到垂直RecyclerView。现在,我试图将第二个Web服务中的数据放入水平RecyclerView
为此,我实现了两个独立的RecyclerView适配器类。我不明白的是如何在OuterRecyclerView中定义InnerRecyclerView,并像在第一个web服务调用中一样通过传递第二个web服务调用的数据使整个过程协同工作。我是这方面的初学者,非常感谢你的帮助
主要活动。java
public class MainActivity extends AppCompatActivity {
RequestQueue requestQueue ;
RequestQueue requestQueue2 ;
RecyclerView recyclerView;
RecyclerView.Adapter recyclerViewadapter;
List<OuterDataModel> DataAdapterClassList;
List<InnerOuterDataModel> InnerAdapterClassList;
LinearLayoutManager recyclerViewlayoutManager;
public String callIdForParse;
OuterDataModel GetOuterDataModel = new OuterDataModel();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DataAdapterClassList = new ArrayList<>();
recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);
recyclerViewlayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(recyclerViewlayoutManager);
myurl = "http://pastebin.com/START";
OuterWebCall();
//Some actions then I call the second webservice
InnerWebCall();
}
public void OuterWebCall(){
String HTTP_SERVER_URL= String.format("http://pastebin.com/mySampleApi/student/%1$s",mStudentRoll);
JsonArrayRequest jsArrRequest = new JsonArrayRequest
(Request.Method.POST, HTTP_SERVER_URL, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//mTxtDisplay.setText("Response: " + response.toString());
AfterOuterWebCall(response);
Log.i(TAG, "Hello");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
}){
};
requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsArrRequest);
}
public void AfterOuterWebCall(JSONArray array){
for(int i = 0; i<array.length(); i++) {
OuterDataModel GetOuterDataModel = new OuterDataModel();
JSONObject json = null;
try {
json = array.getJSONObject(i);
GetOuterDataModel.setId(json.getString("CLASS"));
GetOuterDataModel.setPlateNo(json.getString("HOUSE"));
GetOuterDataModel.setPlateCode(json.getString("IMAGEURL"));
} catch (JSONException e) {
e.printStackTrace();
}
DataAdapterClassList.add(GetOuterDataModel);
mSwipeRefreshLayout.setRefreshing(false);
}
if (array.length() != 0) {
recyclerViewadapter = new NewRecyclerViewAdapter(DataAdapterClassList, this);
recyclerView.setAdapter(recyclerViewadapter);
}
}
public void InnerWebCall(){
String HTTP_SERVER_URL= String.format("http://192.1.2.2/test");
JsonArrayRequest jsArrRequest = new JsonArrayRequest
(Request.Method.POST, HTTP_SERVER_URL, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//mTxtDisplay.setText("Response: " + response.toString());
AfterInnerWebCall(response);
Log.i(TAG, "Hello");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
}){
};
requestQueue2 = Volley.newRequestQueue(this);
requestQueue2.add(jsArrRequest);
}
public void AfterInnerWebCall (JSONArray array){
for(int i = 0; i<array.length(); i++) {
InnerOuterDataModel GetInnerOuterDataModel = new InnerOuterDataModel();
JSONObject json = null;
try {
json = array.getJSONObject(i);
GetInnerOuterDataModel.setName(json.getString("Name"));
GetInnerOuterDataModel.setRank(json.getString("Rank"));
GetInnerOuterDataModel.setPerId(json.getString("ID"));
} catch (JSONException e) {
e.printStackTrace();
}
InnerAdapterClassList.add(GetInnerOuterDataModel);
}
if (array.length() != 0) {
// How to pass the data to the InnerRecyclerViewAdapter?
}
}
}
外部循环服务适配器。java
public class OuterRecyclerViewAdapter extends RecyclerView.Adapter<OuterRecyclerViewAdapter.ViewHolder> {
Context context;
public List<DataModel> dataModels;
public List<PersonnelOnDutyDataModel> dataModels2;
public int mExpandedPosition=-1;
public OuterRecyclerViewAdapter(List<DataModel> getDataAdapter, Context context){
super();
this.dataModels = getDataAdapter;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
DataModel dataAdapter = dataModels.get(position);
RecyclerView.LayoutManager manager = new LinearLayoutManager(context);
viewHolder.InnerRecyclerView.setLayoutManager(manager);
viewHolder.class.setText(dataAdapter.getClass());
viewHolder.house.setText(dataAdapter.getHouse());
//Glide.with(context).load(dataAdapter.getImgUrl()).into(viewHolder.imageView)
final boolean isExpanded = position==mExpandedPosition;
// viewHolder.linearLayout.setVisibility(isExpanded?View.VISIBLE:View.GONE);
viewHolder.itemView.setActivated(isExpanded);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mExpandedPosition = isExpanded ? -1:position;
//TransitionManager.beginDelayedTransition();
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return dataModels.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public TextView class;
public TextView house;
public ImageView imageView;
private RecyclerView InnerRecyclerView;
ConstraintLayout constraintLayout;
public ViewHolder(View itemView) {
super(itemView);
InnerRecyclerView= (RecyclerView) itemView.findViewById(R.id.innerRecyclerView);
imageView = (ImageView) itemView.findViewById(R.id.imageView);
class=(TextView)itemView.findViewById(R.id.textViewClass);
house=(TextView)itemView.findViewById(R.id.textViewHouse);
constraintLayout=(ConstraintLayout)itemView.findViewById(R.id.constrainLayout);
}
}
}
InnerRecyclerView。java
public class InnerRecyclerViewAdapter extends RecyclerView.Adapter<InnerRecyclerViewAdapter.ViewHolder> {
Context context;
public List<InnerDataModel> dataModels;
public InnerRecyclerViewAdapter(List<InnerDataModel> getDataAdapter, Context context){
super();
this.dataModels = getDataAdapter;
this.context = context;
}
public int mExpandedPosition=-1;
@Override
public InnerRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.personnel_on_duty_card, parent, false);
InnerRecyclerViewAdapter.ViewHolder viewHolder = new InnerRecyclerViewAdapter.ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final InnerRecyclerViewAdapter.ViewHolder viewHolder, final int position) {
InnerDataModel dataAdapter = dataModels.get(position);
viewHolder.NameStudentCard.setText(dataAdapter.getName());
viewHolder.RankCard.setText(dataAdapter.getRank());
viewHolder.IDCard.setText(dataAdapter.getId());
final boolean isExpanded = position==mExpandedPosition;
viewHolder.itemView.setActivated(isExpanded);
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mExpandedPosition = isExpanded ? -1:position;
//TransitionManager.beginDelayedTransition();
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return dataModels.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public TextView NameStudentCard;
public TextView RankCard;
public TextView IDCard;
ConstraintLayout constraintLayout;
public ViewHolder(View itemView) {
super(itemView);
NameStudentCard=(TextView)itemView.findViewById(R.id.textViewNameInCard);
RankCard=(TextView)itemView.findViewById(R.id.textViewrankInCard);
IDCard =(TextView)itemView.findViewById(R.id.IDInCard);
constraintLayout=(ConstraintLayout)itemView.findViewById(R.id.constrainLayout);
}
}
}
主要活动。xml
<?xml version="1.0" encoding="utf-8"?>
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:tools="http://schemas.安卓.com/tools"
xmlns:sothree="http://schemas.安卓.com/apk/res-auto"
安卓:id="@+id/sliding_layout"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp"
sothree:umanoParallaxOffset="100dp"
sothree:umanoOverlay="true"
sothree:umanoFadeColor="@安卓:color/transparent">
<TextView
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:gravity="center|top"
安卓:text=" Sliding Up Panel"
安卓:textSize="16sp" />
<LinearLayout
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:background="#ffffff"
安卓:orientation="vertical"
安卓:clickable="true"
安卓:focusable="false"
安卓:id="@+id/dragView">
<安卓.support.v7.widget.RecyclerView
安卓:id="@+id/recyclerView1"
安卓:layout_width="fill_parent"
安卓:layout_height="fill_parent"
/>
</LinearLayout>
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
外部循环视图。xml
<?xml version="1.0" encoding="utf-8"?>
<安卓.support.v7.widget.CardView xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:card_view="http://schemas.安卓.com/tools"
安卓:id="@+id/CardViewOuter"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:layout_marginBottom="4dp"
安卓:layout_marginLeft="8dp"
安卓:layout_marginRight="8dp"
安卓:layout_marginTop="4dp"
card_view:cardCornerRadius="4dp"
安卓:foreground="?attr/selectableItemBackground"
app:cardElevation="2dp"
安卓:transitionName="weatherCardTransition"
>
<安卓.support.constraint.ConstraintLayout
安卓:id="@+id/constrainLayout"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="@+id/textViewStatus"
app:layout_constraintTop_toBottomOf="@+id/textViewStatus">
<TextView
安卓:id="@+id/textViewClass"
安卓:layout_width="0dp"
安卓:layout_height="wrap_content"
安卓:layout_marginStart="8dp"
安卓:layout_marginTop="16dp"
安卓:text="Class"
安卓:textColor="@color/card_text_primary"
安卓:textSize="36sp"
安卓:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
安卓:id="@+id/textViewHose"
安卓:layout_width="wrap_content"
安卓:layout_height="28dp"
安卓:layout_marginStart="8dp"
安卓:layout_marginTop="8dp"
安卓:text="@string/card_header_status"
安卓:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewCalass" />
<安卓.support.v7.widget.RecyclerView
安卓:layout_width="352dp"
安卓:layout_height="134dp"
安卓:layout_marginTop="8dp"
安卓:layout_marginEnd="8dp"
安卓:id="@+id/innerRecyclerView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewCalass" />
</安卓.support.constraint.ConstraintLayout>
</安卓.support.v7.widget.CardView>
内部卡。xml
<?xml version="1.0" encoding="utf-8"?>
<安卓.support.v7.widget.CardView xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:card_view="http://schemas.安卓.com/tools"
安卓:id="@+id/cardViewInnerCard"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_marginBottom="4dp"
安卓:layout_marginLeft="8dp"
安卓:layout_marginRight="8dp"
安卓:layout_marginTop="4dp"
card_view:cardCornerRadius="4dp"
安卓:foreground="?attr/selectableItemBackground"
app:cardElevation="2dp"
安卓:transitionName="weatherCardTransition"
>
<安卓.support.constraint.ConstraintLayout
安卓:layout_width="200dp"
安卓:layout_height="100dp">
<TextView
安卓:id="@+id/textViewNameInCard"
安卓:layout_width="wrap_content"
安卓:layout_height="19dp"
安卓:layout_marginTop="8dp"
安卓:layout_marginEnd="8dp"
安卓:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
安卓:id="@+id/textViewrankInCard"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_marginTop="8dp"
安卓:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewNameInCard" />
<TextView
安卓:id="@+id/IDInCard"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_marginTop="8dp"
安卓:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewrankInCard" />
<ImageButton
安卓:id="@+id/imageButton"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_marginBottom="8dp"
安卓:background="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_more_vert_black_24dp" />
</安卓.support.constraint.ConstraintLayout>
共 (0) 个答案