Java RecyclerView未显示项目,未报告任何错误
所以这里是问题的要点,我已经在几个活动中成功地实现了RecyclerViews,但是这个特殊的RecyclerViews没有显示任何内容 我已经在一个tablayout中创建了一个片段来显示,并且三次重写了代码。下面是整个片段的代码(视图膨胀良好,在回收器顶部有一个搜索栏),适配器位于底部。我故意将OnBindViewHolder留白,因为我在aldready之前写了两次,没有任何结果。任何帮助都将不胜感激 片段+适配器代码:Java RecyclerView未显示项目,未报告任何错误,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,所以这里是问题的要点,我已经在几个活动中成功地实现了RecyclerViews,但是这个特殊的RecyclerViews没有显示任何内容 我已经在一个tablayout中创建了一个片段来显示,并且三次重写了代码。下面是整个片段的代码(视图膨胀良好,在回收器顶部有一个搜索栏),适配器位于底部。我故意将OnBindViewHolder留白,因为我在aldready之前写了两次,没有任何结果。任何帮助都将不胜感激 片段+适配器代码: public static class EditJob extend
public static class EditJob extends Fragment {
ServerRequests serverRequests;
UserLocalStore userLocalStore;
User receivedUser;
EditText searchJob;
ImageView searchBtn;
RecyclerView editJobRecycler;
MyRecyclerAdapter editJobAdapter;
ArrayList<Job> arrayJob;
TextView noJobSearch;
@Override
public void onAttach(Context context) {
super.onAttach(context);
serverRequests = new ServerRequests(context);
userLocalStore = new UserLocalStore(context);
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_edit_job, container, false);
receivedUser = userLocalStore.getAllDetails();
arrayJob = new ArrayList<>();
noJobSearch = (TextView) view.findViewById(R.id.noJobEdit);
searchJob = (EditText) view.findViewById(R.id.etEditJob);
searchBtn = (ImageView) view.findViewById(R.id.editJobImage);
editJobRecycler = (RecyclerView) view.findViewById(R.id.jobEditRecycler);
editJobAdapter = new MyRecyclerAdapter(arrayJob);
editJobRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
editJobRecycler.setAdapter(editJobAdapter);
searchBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
searchJob();
}
});
return view;
}
public void searchJob() {
arrayJob.clear();
serverRequests.searchJobListings(searchJob.getText().toString(), new GetJobObjectsCallBack() {
@Override
public void done(Job[] returnedJobs) {
if (returnedJobs == null || returnedJobs.length == 0) {
noJobSearch.setVisibility(View.VISIBLE);
} else {
noJobSearch.setVisibility(View.GONE);
for (int i = 0; i < returnedJobs.length; i++) {
arrayJob.add(i, returnedJobs[i]);
}
editJobAdapter = new MyRecyclerAdapter(arrayJob);
editJobRecycler.setAdapter(editJobAdapter);
editJobAdapter.notifyDataSetChanged();
}
}
});
}
private class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.VH> {
ArrayList<Job> jobArray;
public MyRecyclerAdapter(ArrayList<Job> jl) {
jobArray = jl;
}
public class VH extends RecyclerView.ViewHolder {
TextView jobID, jobPosition, jobExperience, jobRemarks, jobLocation, jobDescription, jobDomain;
EditText etjobID, etjobPosition, etjobExperience, etjobRemarks, etjobLocation, etjobDescription, etjobDomain;
Button bEditJob;
public VH(View v) {
super(v);
jobID = (TextView) v.findViewById(R.id.returnedJobID);
jobExperience = (TextView) v.findViewById(R.id.returnedJobExperience);
jobRemarks = (TextView) v.findViewById(R.id.returnedJobRemarks);
jobLocation = (TextView) v.findViewById(R.id.returnedJobLocation);
jobDescription = (TextView) v.findViewById(R.id.returnedJobDescription);
jobDomain = (TextView) v.findViewById(R.id.returnedJobDomain);
jobPosition = (TextView) v.findViewById(R.id.returnedJobPosition);
etjobID = (EditText) v.findViewById(R.id.etreturnedJobID);
etjobPosition = (EditText) v.findViewById(R.id.etreturnedJobPosition);
etjobExperience = (EditText) v.findViewById(R.id.etreturnedJobExperience);
etjobRemarks = (EditText) v.findViewById(R.id.etreturnedJobRemarks);
etjobLocation = (EditText) v.findViewById(R.id.etreturnedJobLocation);
etjobDescription = (EditText) v.findViewById(R.id.etreturnedJobDescription);
etjobDomain = (EditText) v.findViewById(R.id.etreturnedJobDomain);
bEditJob = (Button) v.findViewById(R.id.bEditJob);
}
}
@Override
public VH onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater li = LayoutInflater.from(parent.getContext());
View v = li.inflate(R.layout.job_edit_listview, parent);
return new VH(v);
}
@Override
public void onBindViewHolder(VH holder, int position) {
Job current = jobArray.get(position);
}
@Override
public int getItemCount() {
System.out.println("jobarray size = " + jobArray.size());
return jobArray.size();
}
}
}
公共静态类EditJob扩展片段{
服务器请求服务器请求;
UserLocalStore UserLocalStore;
用户接收器;
编辑文本搜索作业;
ImageView搜索BTN;
RecyclerView editJobRecycler;
MyRecyclerAdapter editJobAdapter;
ArrayList arrayJob;
TextView-noJobSearch;
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
serverRequests=新的serverRequests(上下文);
userLocalStore=新的userLocalStore(上下文);
}
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u edit\u作业,容器,false);
receivedUser=userLocalStore.getAllDetails();
arrayJob=新的ArrayList();
noJobSearch=(TextView)view.findViewById(R.id.noJobEdit);
searchJob=(EditText)view.findViewById(R.id.etEditJob);
searchBtn=(ImageView)view.findViewById(R.id.editJobImage);
editJobRecycler=(RecyclerView)view.findViewById(R.id.jobEditRecycler);
editJobAdapter=新的MyRecyclerAdapter(arrayJob);
setLayoutManager(新的LinearLayoutManager(getContext());
setAdapter(editJobAdapter);
searchBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
searchJob();
}
});
返回视图;
}
公共无效搜索作业(){
arrayJob.clear();
serverRequests.searchJobListings(searchJob.getText().toString(),new GetJobObjectsCallBack()){
@凌驾
公共作废完成(作业[]返回的作业){
if(returnedJobs==null | | returnedJobs.length==0){
noJobSearch.setVisibility(View.VISIBLE);
}否则{
noJobSearch.setVisibility(View.GONE);
for(int i=0;i
片段的XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
style="@style/FloatingTextView"
android:layout_marginTop="10dp"
android:elevation="6dp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:animateLayoutChanges="true">
<EditText
android:id="@+id/etEditJob"
style="@style/FloatingTextView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="0.5dp"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/editJobDivider"
android:elevation="0dp"
android:hint="Enter a search term"
android:translationZ="0dp" />
<View
android:id="@+id/editJobDivider"
android:layout_width="1dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/editJobImage"
android:alpha="0.2"
android:background="@color/Black" />
<ImageView
android:id="@+id/editJobImage"
style="@style/FloatingTextView"
android:layout_width="47dp"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_margin="1dp"
android:alpha="0.5"
android:clickable="true"
android:elevation="0dp"
android:padding="10dp"
android:src="@drawable/ic_search_black_48dp"
android:translationZ="0dp" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="No Jobs match your query"
android:id="@+id/noJobEdit"/>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="2dp"
android:id="@+id/jobEditRecycler"/>
</LinearLayout>
PS:我已经检查了在查询数据库时返回大小的数据集,适配器也收到了通知,getItemCount返回了非零大小。老实说,我不知道问题出在哪里
编辑:下面是我用于另一个静态内部类片段的(几乎)相同代码。这个实现工作得很好
public static class JobSearcher extends Fragment {
EditText searchJob;
ImageView searchImage;
RecyclerView searchJobListView;
ArrayList<Job> arrayJob;
ServerRequests serverRequests;
Context parentActivity;
UserLocalStore userLocalStore;
TextView noJobSearch;
MyJobRecyclerAdapter jobArrayAdapter;
User receivedUser;
@Override
public void onAttach(Context activity) {
super.onAttach(activity);
parentActivity = activity;
serverRequests = new ServerRequests(activity);
userLocalStore = new UserLocalStore(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_search_job, container, false);
searchJob = (EditText) v.findViewById(R.id.searchJobEditText);
searchImage = (ImageView) v.findViewById(R.id.searchJobImage);
receivedUser = userLocalStore.getAllDetails();
noJobSearch = (TextView) v.findViewById(R.id.noJobSearch);
searchImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchJob();
}
});
searchJobListView = (RecyclerView) v.findViewById(R.id.jobSearchRecycler);
arrayJob = new ArrayList<>();
jobArrayAdapter = new MyJobRecyclerAdapter(arrayJob);
searchJobListView.setLayoutManager(new LinearLayoutManager(getContext()));
searchJobListView.setAdapter(jobArrayAdapter);
return v;
}
public void searchJob() {
arrayJob.clear();
serverRequests.searchJobListings(searchJob.getText().toString(), new GetJobObjectsCallBack() {
@Override
public void done(Job[] returnedJobs) {
if (returnedJobs == null || returnedJobs.length == 0) {
noJobSearch.setVisibility(View.VISIBLE);
} else {
noJobSearch.setVisibility(View.GONE);
for (int i = 0; i < returnedJobs.length; i++) {
arrayJob.add(i, returnedJobs[i]);
}
jobArrayAdapter = new MyJobRecyclerAdapter(arrayJob);
searchJobListView.setAdapter(jobArrayAdapter);
jobArrayAdapter.notifyDataSetChanged();
}
}
});
}
public class MyJobRecyclerAdapter extends RecyclerView.Adapter<MyJobRecyclerAdapter.ViewHolder> {
ArrayList<Job> arrayJob = new ArrayList<>();
public MyJobRecyclerAdapter(ArrayList<Job> jl) {
arrayJob = jl;
}
@Override
public MyJobRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater li = LayoutInflater.from(parent.getContext());
View inflatedView = li.inflate(R.layout.job_item_list, parent, false);
ViewHolder VH = new ViewHolder(inflatedView);
return VH;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Job currentJob = arrayJob.get(position);
holder.jobDesc.setText("Job Description: " + currentJob.getDescription());
holder.jobID.setText("ID: " + currentJob.getID());
holder.jobRemarks.setText("Remarks: " + currentJob.getRemarks());
holder.jobExperience.setText("Experience Required: " + currentJob.getExperience() + " years");
holder.jobDomain.setText("Domain: " + currentJob.getDomain());
holder.jobLoc.setText("Location: " + currentJob.getLocation());
holder.jobType.setText("Type: " + currentJob.getType());
holder.jobPos.setText("Position: " + currentJob.getPosition());
}
@Override
public int getItemCount() {
return arrayJob.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView jobID, jobDesc, jobType, jobLoc, jobPos, jobRemarks, jobExperience, jobDomain;
Button applyForJob;
public ViewHolder(View itemView) {
super(itemView);
jobID = (TextView) itemView.findViewById(R.id.returnedJobID);
jobDesc = (TextView) itemView.findViewById(R.id.returnedJobDescription);
jobLoc = (TextView) itemView.findViewById(R.id.returnedJobLocation);
jobType = (TextView) itemView.findViewById(R.id.returnedJobType);
jobPos = (TextView) itemView.findViewById(R.id.returnedJobPosition);
jobRemarks = (TextView) itemView.findViewById(R.id.returnedJobRemarks);
jobExperience = (TextView) itemView.findViewById(R.id.returnedJobExperience);
jobDomain = (TextView) itemView.findViewById(R.id.returnedJobDomain);
applyForJob = (Button) itemView.findViewById(R.id.bApplyJob);
applyForJob.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bApplyJob:
serverRequests.applyForJob(receivedUser.getEmail(), receivedUser.getName(), jobID.getText().toString(), jobPos.getText().toString());
}
}
}
}
公共静态类JobSearcher扩展片段{
编辑文本搜索作业;
图像视图搜索图像;
public VH(View v) {
super(v);
jobLocation = (TextView) v.findViewById(R.id.returnedJobLocation);
jobLocation.setText("something location");
}