我已經實現了兩個RecyclerView適配器,一個是RecyclerViewAdapter,另一個是EmptyRecyclerViewAdapter。我試圖做的是每當刪除所有項目時顯示文本Empty Text Here!
。如果在列表中沒有項目尚未刪除所有recyclerview項目後,TextView將不會顯示
Image 2
工作,它會顯示這是對Image 2
但是,下面顯示的文字Empty Text Here!
,如果已經有名單上的項目,如果我將刪除所有的項目的列表中,Image 1
將會顯示沒有結果,沒有文字。
EmptyRecyclerViewAdapter.class
public class EmptyRecyclerViewAdapter extends RecyclerView.Adapter<EmptyRecyclerViewAdapter.ViewHolder> {
private String mMessage;
public EmptyRecyclerViewAdapter(){}
public EmptyRecyclerViewAdapter(String message){ mMessage = message;}
@Override
public EmptyRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.empty_item, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
if(mMessage != null){
viewHolder.mMessageView.setText(mMessage);
}
return viewHolder;
}
@Override
public void onBindViewHolder(EmptyRecyclerViewAdapter.ViewHolder holder, int position) {}
@Override
public int getItemCount() { return 1; }
public class ViewHolder extends RecyclerView.ViewHolder {
final View mView;
final TextView mMessageView;
public ViewHolder(View view) {
super(view);
mView = view;
mMessageView = (TextView) view.findViewById(R.id.empty_item_message);
}
}
}
RecyclerViewAdapter.class
public class RecyclerViewAdapter extends RecyclerView.Adapter <RecyclerView.ViewHolder> {
private List<ItemModel> list;
private Context mContext = null;
public RecyclerViewAdapter (Context context, List<ItemModel> itemList) {
mContext = context;
this.list = itemList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
final ItemModel l = list.get(holder.getAdapterPosition());
final DataDb dataDb = new DataDb (mContext);
((MyViewHolder) holder).title.setText(l.getTitle());
((MyViewHolder) holder).caption.setText(l.getCaption());
((MyViewHolder) holder).removeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String confirmText = "Are you sure you want to remove this item ?";
AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.AlertDialogStyle);
builder.setTitle("Deleting..");;
builder.setPositiveButton("Remove", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
list.remove(holder.getAdapterPosition());
dataDb.removeItem(l.getId());
notifyDataSetChanged();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.getWindow().setLayout(600, 400);
alert.show();
}
});
}
@Override
public int getItemCount() {
return (list != null? list.size():0);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public TextView caption;
ImageButton removeBtn;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
caption = (TextView) itemView.findViewById(R.id.caption);
removeBtn = (ImageButton) itemView.findViewById(R.id.btnRemoveItem);
}
}
}
ActivityA.class
public class ActivityA extends Fragment {
List<ItemModel> list;
RecyclerView mRecyclerView;
RecyclerViewAdapter adapter;
ProgressBar progressBar;
DataDb dataDb;
EmptyRecyclerViewAdapter emptyRecyclerViewAdapter;
public ActivityA() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(activity_one_layout, container, false);
progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview);
dataDb = new DataDb(getActivity());
list= dataDb .getList();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setHasFixedSize(true);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
if(list == null || list.size() == 0) {
progressBar.setVisibility(View.GONE);
emptyRecyclerViewAdapter = new EmptyRecyclerViewAdapter("Empty Text Here!");
mRecyclerView.setAdapter(emptyRecyclerViewAdapter);
} else {
new LoadList().execute();
}
return rootView;
}
@Override
public void onResume() {
super.onResume();
}
private class LoadList extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected Void doInBackground(Void... voids) {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void params){
progressBar.setVisibility(View.GONE);
if(!list.isEmpty()) {
adapter = new RecyclerViewAdapter(getActivity(), list);
mRecyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
} else {
Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT).show();
}
}
}
}
圖像1 - 輸出結果
圖片2 - 輸出目標
你是在一個適配器刪除一個項目,你需要更新中的另一個適配器項目。您需要將參考傳遞給emptyRecycler適配器或從活動中通知它。 –