Может быть, это немного глупо спрашивать, но я просто застрял с этим:
У меня есть база данных номеров + Сущности + Daos.
У сущностей есть столбец с названием "затраты""- так что в основном я хочу суммировать все затраты (конечно, отслеживая, если был новый ввод, поэтому проверьте, изменилась ли сумма - если так, конечно, измените значение / textview), а затем просто поместите значение с.toString () в TextView.
У меня уже есть RecyclerView + CardView с классом Adapter / ViewModel / Repository (они помещают только имена входных данных в CardView)
Я просто надеваюНе знаю, где разместить данные о затратах - я не думаю, что мне нужен новый ViewModel / Repository, но куда мне поместить метод sumAllCost () моего Dao
public class SubRepository {
private SubDAO mSubDao;
private LiveData<List<Sub>> mAllSubs;
SubRepository(Application application){
SubDatabase db = SubDatabase.getInstance(application);
mSubDao = db.getsubDAO();
mAllSubs = mSubDao.getAllSubs();
}
public LiveData<List<Sub>> getAllSubs(){
return mAllSubs;
}
public void insert (Sub sub){
new insertAsyncTask(mSubDao).execute(sub);
}
private static class insertAsyncTask extends AsyncTask<Sub, Void, Void> {
private SubDAO mAsyncTaskDao;
insertAsyncTask (SubDAO dao){
mAsyncTaskDao = dao;
}
@Override
protected Void doInBackground(final Sub... params){
mAsyncTaskDao.addSub(params[0]);
return null;
}
}
}
public class SubViewModel extends AndroidViewModel {
private SubRepository mRepository;
private LiveData<List<Sub>> mallSubs;
public SubViewModel (Application application) {
super (application);
mRepository = new SubRepository(application);
mallSubs = mRepository.getAllSubs();
}
public LiveData<List<Sub>> getAllSubs(){
return mallSubs;
}
public void insert (Sub sub){
mRepository.insert(sub);
}}
class HomeSubAdapter extends RecyclerView.Adapter<HomeSubAdapter.ViewHolder> {
List<Sub> subList;
Context context;
private final LayoutInflater mInflater;
public static FragmentManager fragmentManager;
HomeSubAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
//Just wanna show the name so only one tv
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView main_cv_dummy;
public ViewHolder(View itemView) {
super(itemView);
main_cv_dummy = itemView.findViewById(R.id.main_cv_dummy);
}
}
@Override
public HomeSubAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View subview = mInflater.inflate(R.layout.snippet_main_cardview, parent, false);
return new ViewHolder(subview);
}
@Override
public void onBindViewHolder (HomeSubAdapter.ViewHolder holder, final int position) {
if (subList!= null){
final Sub current = subList.get(position);
holder.main_cv_dummy.setText(current.getSubName());
holder.main_cv_dummy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Fragment currentFrag = ShowInfoFragment.newInstance(current);
//fragmentManager.beginTransaction().replace(R.id.compLayout, currentFrag).addToBackStack(null).commit();
Log.d("Clicking: ", current.getSubName() + " was clicked - Listener worked");
}
});
}
else {
holder.main_cv_dummy.setText("Create a new Sub!");
}
}
public void setSubs(List<Sub> subs){
this.subList = subs;
notifyDataSetChanged();
}
@Override
public int getItemCount(){
if(subList!=null){
return subList.size();
} else
{
return 0;
}
}
Активность с onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Log.d(TAG, "onCreate: starting");
middle_vf = (ViewFlipper)findViewById(R.id.middle_vf);
tv_sum = (TextView) findViewById(R.id.tv_sumCosts);
mSubViewModel = ViewModelProviders.of(this).get(SubViewModel.class);
mSubViewModel.getAllSubs().observe(this, new Observer<List<Sub>>() {
@Override
public void onChanged(@Nullable List<Sub> subs) {
mAdapter.setSubs(subs);
}
});
fragmentManager = getSupportFragmentManager();
//Whenever screen is called - call for recycler view
mRecyclerView = (RecyclerView) findViewById(R.id.main_rv);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//give dummy-subs to Adapter to Recycler
mAdapter = new HomeSubAdapter(this);
mRecyclerView.setAdapter(mAdapter);
setupBottomNavigationView();
setupFAB();
}
Я действительно не уверен насчет всей этой суммы SUM
//Get all costs
@Query("SELECT SUM(costs) FROM subscriptions")
void getAllCosts();
//Get all subs
@Query("SELECT * FROM subscriptions")
LiveData<List<Sub>> getAllSubs();
Может быть, кто-то можетпомогите - я чувствую себя довольно глупо сейчас извините!Я уже несколько раз ищу подходящее решение, но просто не могу найти то, что мне помогает (или что я понимаю)