Given: adapter and fragment

It is necessary to apply from the adapter to the textview which is in the fragment and insert the text there.

How can this be implemented?

import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.daimajia.swipe.SwipeLayout; import com.daimajia.swipe.adapters.RecyclerSwipeAdapter; import java.sql.SQLException; import java.text.ParseException; import java.util.List; import ru.by_em.my_finances.BaseActivity; import ru.by_em.my_finances.Category; import ru.by_em.my_finances.CategoryList; import ru.by_em.my_finances.R; import ru.by_em.my_finances.ShowItemActivity; import ru.by_em.my_finances.db.DBDataSource; import ru.by_em.my_finances.db.DBHelper; /** * Created by Admin on 21.10.2016. */ public class SwipeRecyclerViewAdapter extends RecyclerSwipeAdapter<SwipeRecyclerViewAdapter.SimpleViewHolder> { private Context mContext; private List<CategoryList> studentList; private View fragmentView; private DBHelper dbHelper; private DBDataSource myDb; boolean type; //true income //false costs private TextView myMoney; private TextView sum_today; private TextView sum_yesterday; private RecyclerView todayList; private TextView todayEmptyView; private RecyclerView yesterdayList; private TextView yesterdayEmptyView; public SwipeRecyclerViewAdapter(Context context, List<CategoryList> objects, boolean type, View fragmentView) { this.mContext = context; this.studentList = objects; this.type = type; this.fragmentView = fragmentView; } @Override public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.swipe_row_item, parent, false); myDb = new DBDataSource(mContext.getApplicationContext()); return new SimpleViewHolder(view); } @Override public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) { initFragmentView(); final CategoryList item = studentList.get(position); viewHolder.categoryName.setText((item.getName()) /*+ " - Row Pos. " + position*/); viewHolder.categoryPhoto.setImageResource(item.getPhotoId()); viewHolder.itemSum.setText(item.getSum()); viewHolder.itemDate.setText(item.getDate()); viewHolder.moneyType.setText(item.getMoneyType()); viewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.PullOut); // Drag From Left //viewHolder.swipeLayout.addDrag(SwipeLayout.DragEdge.Left, viewHolder.swipeLayout.findViewById(R.id.bottom_wrapper1)); // Drag From Right viewHolder.swipeLayout.addDrag(SwipeLayout.DragEdge.Right, viewHolder.swipeLayout.findViewById(R.id.bottom_wrapper)); // Handling different events when swiping viewHolder.swipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() { @Override public void onClose(SwipeLayout layout) { //when the SurfaceView totally cover the BottomView. } @Override public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) { //you are swiping. } @Override public void onStartOpen(SwipeLayout layout) { } @Override public void onOpen(SwipeLayout layout) { //when the BottomView totally show. } @Override public void onStartClose(SwipeLayout layout) { } @Override public void onHandRelease(SwipeLayout layout, float xvel, float yvel) { //when user's hand released. } }); /*viewHolder.swipeLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if ((((SwipeLayout) v).getOpenStatus() == SwipeLayout.Status.Close)) { //Start your activity Toast.makeText(mContext, " onClick : " + item.getName() + " \n" + item.getEmailId(), Toast.LENGTH_SHORT).show(); } } });*/ viewHolder.swipeLayout.getSurfaceView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Toast.makeText(mContext, " onClick : " + item.getName() + " \n" + item.getMoneyType(), Toast.LENGTH_SHORT).show(); Intent intent = new Intent(mContext.getApplicationContext(), ShowItemActivity.class); intent.putExtra("type", type); //Log.d(BaseActivity.LOG_TAG, "sebtype = " + type); myDb = new DBDataSource(mContext); dbHelper = new DBHelper(mContext); try { intent.putExtra("idOfTransaction", myDb.getIdOfTransaction(item.getdateToDeleteItem())); //Log.d(BaseActivity.LOG_TAG, "sebDidOfTransaction = " + myDb.getIdOfTransaction(item.getdateToDeleteItem())); } catch (SQLException e) { e.printStackTrace(); } dbHelper.close(); intent.putExtra("categoryName", viewHolder.categoryName.getText().toString()); intent.putExtra("itemSum", viewHolder.itemSum.getText().toString()); intent.putExtra("itemDate", viewHolder.itemDate.getText().toString()); mContext.startActivity(intent); } }); viewHolder.btnLocation.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), "Clicked on Map " + viewHolder.categoryName.getText().toString(), Toast.LENGTH_SHORT).show(); } }); viewHolder.tvShare.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(view.getContext(), "Clicked on Share " + viewHolder.categoryName.getText().toString(), Toast.LENGTH_SHORT).show(); } }); viewHolder.tvEdit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(view.getContext(), "Clicked on Edit " + viewHolder.categoryName.getText().toString(), Toast.LENGTH_SHORT).show(); } }); viewHolder.tvDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mItemManger.removeShownLayouts(viewHolder.swipeLayout); studentList.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, studentList.size()); mItemManger.closeAllItems(); Toast.makeText(view.getContext(), "+" + viewHolder.itemSum.getText().toString(), Toast.LENGTH_SHORT).show(); myDb = new DBDataSource(mContext); dbHelper = new DBHelper(mContext); try { if (type) { myDb.deleteTask(myDb.getIdOfTransaction(item.getdateToDeleteItem()), true); } else { myDb.deleteTask(myDb.getIdOfTransaction(item.getdateToDeleteItem()), false); } //Log.d(LOG_TAG,"item.getDate() = " + DBDataSource.makeDate2(item.getDate(), true)); } catch (SQLException e) { e.printStackTrace(); } dbHelper.close(); //тут изменяю данные в textview if (fragmentView != null) { //myDb = new DBDataSource(mContext.getApplicationContext()); try { hide_or_show_todayList(); hide_or_show_yesterdayList(); if (type) { myMoney.setText(mContext.getString(R.string.myMoney) + " " + String.valueOf(myDb.getMyMoney())); sum_today.setText(mContext.getString(R.string.income_today) + " " + String.valueOf(myDb.getSum(true, true))); sum_yesterday.setText(mContext.getString(R.string.income_yesterday) + " " + String.valueOf(myDb.getSum(false, true))); } else { myMoney.setText(mContext.getString(R.string.myMoney) + " " + String.valueOf(myDb.getMyMoney())); sum_today.setText(mContext.getString(R.string.costs_today) + " " + String.valueOf(myDb.getSum(true, false))); sum_yesterday.setText(mContext.getString(R.string.costs_yesterday) + " " + String.valueOf(myDb.getSum(false, false))); } } catch (SQLException | ParseException e) { e.printStackTrace(); } } } }); // mItemManger is member in RecyclerSwipeAdapter Class mItemManger.bindView(viewHolder.itemView, position); } private void initFragmentView() { if (fragmentView != null) { myMoney = (TextView) fragmentView.findViewById(R.id.textView_myMoney); sum_today = (TextView) fragmentView.findViewById(R.id.sum_today); sum_yesterday = (TextView) fragmentView.findViewById(R.id.sum_yestarday); todayList = (RecyclerView) fragmentView.findViewById(R.id.rvList); todayEmptyView = (TextView) fragmentView.findViewById(R.id.empty_view_today); yesterdayList = (RecyclerView) fragmentView.findViewById(R.id.rvList2); yesterdayEmptyView = (TextView) fragmentView.findViewById(R.id.empty_view_yesterday); } } @Override public int getItemCount() { return studentList.size(); } @Override public int getSwipeLayoutResourceId(int position) { return R.id.swipe; } public void add(Category category, TextView textView_sum, Boolean type) throws SQLException, ParseException { myDb = new DBDataSource(mContext); myDb.add(category, textView_sum, false); // hide_or_show_todayList(); //hide_or_show_yesterdayList(); } public void updateList(List<CategoryList> newlist) throws SQLException, ParseException { studentList.clear(); studentList.addAll(newlist); this.notifyDataSetChanged(); // hide_or_show_todayList(); //hide_or_show_yesterdayList(); } public void hide_or_show_todayList() throws SQLException, ParseException { //true income //false costs myDb = new DBDataSource(mContext); if (myDb.getTodayItems(true).size() == 0) { todayList.setVisibility(View.GONE); todayEmptyView.setVisibility(View.VISIBLE); } else { todayList.setVisibility(View.VISIBLE); todayEmptyView.setVisibility(View.GONE); } if (myDb.getTodayItems(false).size() == 0) { todayList.setVisibility(View.GONE); todayEmptyView.setVisibility(View.VISIBLE); } else { todayList.setVisibility(View.VISIBLE); todayEmptyView.setVisibility(View.GONE); } } public void hide_or_show_yesterdayList() throws SQLException, ParseException { //true income //false costs myDb = new DBDataSource(mContext); if (myDb.getYesterdayItems(true).isEmpty()) { yesterdayList.setVisibility(View.GONE); yesterdayEmptyView.setVisibility(View.VISIBLE); } else { yesterdayList.setVisibility(View.VISIBLE); yesterdayEmptyView.setVisibility(View.GONE); } if (myDb.getYesterdayItems(false).isEmpty()) { yesterdayList.setVisibility(View.GONE); yesterdayEmptyView.setVisibility(View.VISIBLE); } else { yesterdayList.setVisibility(View.VISIBLE); yesterdayEmptyView.setVisibility(View.GONE); } } // ViewHolder Class public static class SimpleViewHolder extends RecyclerView.ViewHolder { SwipeLayout swipeLayout; TextView tvDelete; TextView tvEdit; TextView tvShare; ImageButton btnLocation; TextView categoryName; TextView itemSum; TextView itemDate; TextView moneyType; ImageView categoryPhoto; public SimpleViewHolder(View itemView) { super(itemView); swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe); tvDelete = (TextView) itemView.findViewById(R.id.tvDelete); tvEdit = (TextView) itemView.findViewById(R.id.tvEdit); tvShare = (TextView) itemView.findViewById(R.id.tvShare); btnLocation = (ImageButton) itemView.findViewById(R.id.btnLocation); categoryName = (TextView) itemView.findViewById(R.id.category_name); categoryPhoto = (ImageView) itemView.findViewById(R.id.category_photo); itemSum = (TextView) itemView.findViewById(R.id.item_sum); itemDate = (TextView) itemView.findViewById(R.id.item_date); moneyType = (TextView) itemView.findViewById(R.id.moneyType); } } 

}

  • 2
    First clarification. The task of the adapter is to form the same type of view for the list. You also need to refer to some textview "in the fragment." Most likely, this should happen in response to some kind of user action. Is that so or not? If not, describe in more detail. - tse
  • @tse, there is a list of operations when deleting the textview value in the fragment should be updated - java
  • @java, by operations is understood to-l action that occurs by pressing? - YurySPb
  • @Yuriy SPb, yes, when you click the delete button, the operation is deleted, after which the amount must be updated in the textview - java

2 answers 2

It is necessary to spread everything across contexts so that the fragment performs its task as a controller, and the adapter displays the list given to it, and not perform all the work of the fragment inside it. Here's what happened in a quick fluent way (part of the code was removed to focus on the subject matter):

Adapter:

 public class SwipeRecyclerViewAdapter extends RecyclerSwipeAdapter<SwipeRecyclerViewAdapter.SimpleViewHolder> { private StudentClickListener listener; private List<CategoryList> studentList = new ArrayList<>(); private DBHelper dbHelper; private DBDataSource myDb; boolean type; //true income //false costs public SwipeRecyclerViewAdapter(Context context, boolean type, StudentClickListener listener) { this.listener = listener; myDb = new DBDataSource(context); dbHelper = new DBHelper(context); this.studentList = objects; this.type = type; } public void setModels(List<CategoryList> objects) { this.studentList = objects; notifyDataSetChanged(); } @Override public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.swipe_row_item, parent, false); return new SimpleViewHolder(view); } @Override public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) { final CategoryList item = studentList.get(position); viewHolder.categoryName.setText((item.getName()) /*+ " - Row Pos. " + position*/); viewHolder.categoryPhoto.setImageResource(item.getPhotoId()); viewHolder.itemSum.setText(item.getSum()); viewHolder.itemDate.setText(item.getDate()); viewHolder.moneyType.setText(item.getMoneyType()); // init swipe item .... // init swipe item .... // init swipe item .... } @Override public int getItemCount() { return studentList.size(); } @Override public int getSwipeLayoutResourceId(int position) { return R.id.swipe; } public void add(Category category, TextView textView_sum, Boolean type) throws SQLException, ParseException { myDb = new DBDataSource(mContext); myDb.add(category, textView_sum, false); // hide_or_show_todayList(); //hide_or_show_yesterdayList(); } public void updateList(List<CategoryList> newlist) throws SQLException, ParseException { studentList.clear(); studentList.addAll(newlist); this.notifyDataSetChanged(); // hide_or_show_todayList(); //hide_or_show_yesterdayList(); } public void hide_or_show_todayList() throws SQLException, ParseException { //hide/show logic } public void hide_or_show_yesterdayList() throws SQLException, ParseException { //hide show logic } public static class SimpleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { SwipeLayout swipeLayout; TextView tvDelete; TextView tvEdit; TextView tvShare; ImageButton btnLocation; TextView categoryName; TextView itemSum; TextView itemDate; TextView moneyType; ImageView categoryPhoto; public SimpleViewHolder(View itemView) { super(itemView); swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe); tvDelete = (TextView) itemView.findViewById(R.id.tvDelete); tvEdit = (TextView) itemView.findViewById(R.id.tvEdit); tvShare = (TextView) itemView.findViewById(R.id.tvShare); btnLocation = (ImageButton) itemView.findViewById(R.id.btnLocation); btnLocation.setOnClickListener(this); tvShare.setOnClickListener(this); tvEdit.setOnClickListener(this); tvDelete.setOnClickListener(this); categoryName = (TextView) itemView.findViewById(R.id.category_name); categoryPhoto = (ImageView) itemView.findViewById(R.id.category_photo); itemSum = (TextView) itemView.findViewById(R.id.item_sum); itemDate = (TextView) itemView.findViewById(R.id.item_date); moneyType = (TextView) itemView.findViewById(R.id.moneyType); } @Override public void onClick(View v) { if (v.getId() == R.id.tvDelete) listener.deleteClicked(getAdapterPosition()); if (v.getId() == R.id.tvEdit) listener.editCliced(getAdapterPosition()); if (v.getId() == R.id.btnLocation) listener.mapClicked(getAdapterPosition()); if (v.getId() == R.id.tvShare) listener.shareClicked(getAdapterPosition()); } } } 

Fragment:

 public class SdudentsListFragment extends Fragment { private View fragmentView; private TextView myMoney; private TextView sum_today; private TextView sum_yesterday; private RecyclerView todayList; private TextView todayEmptyView; private RecyclerView yesterdayList; private TextView yesterdayEmptyView; private SwipeRecyclerViewAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); adapter = new SwipeRecyclerViewAdapter(getContext(), true, createClick()); } private SwipeRecyclerViewAdapter.StudentClickListener createClick() { return new SwipeRecyclerViewAdapter.StudentClickListener() { @Override public void mapClicked(int position, CategoryList item) { } @Override public void shareClicked(int position, CategoryList item) { } @Override public void editCliced(int position, CategoryList item) { } @Override public void deleteClicked(int position, CategoryList item) { //логика удаления операции над данными и View } }; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { fragmentView = inflater.inflate(R.layout.fragment_layout, container, false); return fragmentView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); myMoney = (TextView) fragmentView.findViewById(R.id.textView_myMoney); sum_today = (TextView) fragmentView.findViewById(R.id.sum_today); sum_yesterday = (TextView) fragmentView.findViewById(R.id.sum_yestarday); todayList = (RecyclerView) fragmentView.findViewById(R.id.rvList); todayEmptyView = (TextView) fragmentView.findViewById(R.id.empty_view_today); yesterdayList = (RecyclerView) fragmentView.findViewById(R.id.rvList2); yesterdayEmptyView = (TextView) fragmentView.findViewById(R.id.empty_view_yesterday); //setup recycler view //adapter.setModels(); } 

Interface:

 public interface StudentClickListener { void mapClicked(int position, CategoryList item); void shareClicked(int position, CategoryList item); void editCliced(int position, CategoryList item); void deleteClicked(int position, CategoryList item); } 

PS The logic of working with the Database also needs to be transferred to the adapter in the adapter to push / update / delete already finished CategoryList objects, via the interface signature, transfer the parameters you need

  • I couldn’t add your code, if you don’t find it difficult, don’t even tell me where you can read about and adapt the internet a lot of articles, but they all write differently, there’s a mess in my head that cannot be cleared ( - java
  • @java code, because I have no objects written on my knee, I need to understand what is the meaning, what exactly is not clear? - georgehardcore
  • in the adapter on this.studentList = objects и if (v.getId() == R.id.tvDelete) listener.deleteClicked(getAdapterPosition()); the fragment does not see the interface, even though it was created it offers to create a new one - java
  • And where do you get the data list? - georgehardcore

Solved the problem by adding parameters to the constructor.

  public SwipeRecyclerViewAdapter(Context context, List<CategoryList> objects, boolean type, View fragmentView) { this.mContext = context; this.studentList = objects; this.type = type; this.fragmentView = fragmentView; } 
  • badly decided, it was necessary to hang up the callback and delete the necessary data into a fragment using it - georgehardcore
  • @georgehardcore, and how is it? - java
  • Add adapter code at least partially - georgehardcore
  • @georgehardcore, added, why is my version bad? - java