簡體   English   中英

我需要使用存儲在房間數據庫中的按日期(開始日期和結束日期之間)的 recyclerView 過濾列表視圖

[英]I need to filter the listview using recyclerView by date(between start date and end date) stored in Room Database

我正在使用當前日期將數據存儲在 Roomdatabase 中的 Amount 中。該應用程序成功存儲數據並顯示我在當前日期的 recylerview 中列出存儲的項目。 現在我需要過濾我按日期添加的總金額的結果總和,就像我想顯示帶有開始日期和結束日期的列表一樣。 我可以使用查詢獲得上述總和,但無法填充日期之間的列表。

我希望我描述了這個問題,以便您理解。 這是我的代碼

public class MainActivity extends AppCompatActivity {


TextView cash,card,tAmount,tDate;
RecyclerView recyclerView;
RoomAdapter roomAdapter;
Button btn;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate ( savedInstanceState );
    setContentView ( R.layout.activity_main );



    btn =(Button)findViewById ( R.id.fbtn );

    recyclerView=(RecyclerView)findViewById ( R.id.myrecView );
    recyclerView.setLayoutManager ( new LinearLayoutManager (this  ) );

    cash=(TextView)findViewById ( R.id.cashTxt );
    card=(TextView)findViewById ( R.id.cardText );
    tAmount=(TextView)findViewById ( R.id.total_amount );





    btn.setOnClickListener ( new View.OnClickListener () {
        @Override
        public void onClick(View view)
        {


            MaterialDatePicker.Builder<Pair<Long, Long>> materialDateBuilder = MaterialDatePicker.Builder.dateRangePicker();
            materialDateBuilder.setTitleText ( "Select date Range" );
            final MaterialDatePicker materialDatePicker=materialDateBuilder.build();
            materialDatePicker.show ( getSupportFragmentManager (), "MATERIAL_DATE_PICKER");

            materialDatePicker.addOnPositiveButtonClickListener( new MaterialPickerOnPositiveButtonClickListener ()
            {

                        @SuppressLint("SetTextI18n")
                        @Override
                        public void onPositiveButtonClick(Object selection) {

                            Pair selectedDates = (Pair) materialDatePicker.getSelection();

                            final Pair<Date, Date> rangeDate = new Pair<>(new Date((Long) selectedDates.first), new Date((Long) selectedDates.second));
                            Date startDate=rangeDate.first;
                            Date endDate=rangeDate.second;
                            //SimpleDateFormat simpleFormat = new SimpleDateFormat ("dd MMM yyyy HH:mm");

                            long sDates= startDate.getTime ();
                            long eDates=endDate.getTime ();



                            AppDatabase db = Room.databaseBuilder(getApplicationContext (), AppDatabase.class, "myincome").allowMainThreadQueries ().build();
                            UserDao userDao = db.userDao();
                            userDao.newAllExpensesFromTo ( sDates,eDates );
                            String cIncome= String.valueOf ( userDao.newAllExpensesFromTo ( sDates,eDates ) );
                            tAmount.setText ( cIncome );

                          // ArrayList<Income> incomes= new ArrayList<> (userDao.newAllExpensesFromTo ( sDates,eDates ));


                            ArrayList incomes=new ArrayList (userDao.newAllExpensesFromTo ( sDates,eDates ));


                            roomAdapter= new RoomAdapter ( incomes );
                            recyclerView.setAdapter ( roomAdapter );

                            roomAdapter.notifyDataSetChanged ();


                          //  Log.d ("SELECTED DATE :","Converted Dates"+  simpleFormat.format(sDates) + " Second : " + simpleFormat.format(eDates));

                            Log.d ("SELECTED DATE :","Converted Dates"+userDao.newAllExpensesFromTo ( sDates,eDates )+incomes.size () );

                        }
                    });





        }
    } );

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener ( new View.OnClickListener () {
        @Override
        public void onClick(View view) {

            getRoomData();
            getRoomDataSum();
            getCashSum();
            BottomSheet bottomSheet=new BottomSheet ();
            bottomSheet.show ( getSupportFragmentManager () ,bottomSheet.getTag () );
        }
    } );

    getRoomData();
    getRoomDataSum();
    getCashSum();

}

這是返回我添加的金額總和的查詢

    @Query("SELECT SUM (Amount) FROM myIncome WHERE Date BETWEEN :startDate AND :endDate")
int  newAllExpensesFromTo(Long startDate,Long endDate);

這是適配器

public class RoomAdapter extends RecyclerView.Adapter<RoomAdapter.myViewHolder>{

List<Income> incomes;
Context context ;
List<Integer> customList;

public RoomAdapter(List<Income> incomes) {
    this.incomes = incomes;

}


public RoomAdapter(ArrayList<Income> cincomes) {
    this.incomes = cincomes;

}

@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view= LayoutInflater.from ( parent.getContext () ).inflate ( R.layout.fragment_blank ,parent,false);
    return new myViewHolder ( view );
}

@Override
public void onBindViewHolder(@NonNull myViewHolder holder, int position)
{
    
  Date date = incomes.get ( position ).getDate ();
  DateFormat dateFormat = new SimpleDateFormat ("dd-MM-yyyy HH:mm");
  String stringDate = dateFormat.format ( date );
  
    holder.AmountType.setText ( incomes.get ( position ).getType ()  );
    holder.textViewAmount.setText ( String.valueOf (  incomes.get (  position).getAmount () ));
    holder.company.setText ( incomes.get ( position ).getCompany ());

    String cName= (String) holder.company.getText ();



    holder.dateText.setText (stringDate);

}

@Override
public int getItemCount() {
    return incomes.size ();
}

class myViewHolder extends RecyclerView.ViewHolder {
    TextView textViewAmount,AmountType,company,dateText;
    ImageView imageView;
    public myViewHolder(@NonNull View itemView) {
        super ( itemView );

        AmountType=itemView.findViewById ( R.id.AmountType );
        textViewAmount=itemView.findViewById ( R.id.txtViewAmount );
        company=itemView.findViewById ( R.id.Company );
        imageView=(ImageView)itemView.findViewById ( R.id.img1 );
        dateText=(TextView)itemView.findViewById ( R.id.dateText);
    }
}

}

嗨所以最后我找到了解決方案。 也許沒有人回答我的問題。 我發現的問題是在上述查詢中的查詢中,我試圖得到結果的總和,但我也想填充列表。 但上面的查詢只會顯示總和,不會顯示結果列表。

所以正確的查詢是

@Query("SELECT * FROM myIncome WHERE Date BETWEEN :startDate AND :endDate")
List<Income>  newAll(Long startDate,Long endDate);

這將帶來列表並顯示您的過濾日期之間的項目列表視圖。謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM