簡體   English   中英

帶有外部參數的onClickListener內部的Android調用方法

[英]Android call method inside onClickListener with external parameters

因此,我正在為畢業設計的最終項目開發一個應用程序,在我的應用程序中,我有一個帶有imageView和textView的布局,以設置這些元素的內容,我將ArrayList作為參數並使用setText(),有用。

但是我的Arraylist具有多個元素,並且我的大問題是我想在單擊按鈕時更改imageView和textView的內容。 我的想法是,當我單擊按鈕時,它將增加值並更改arrayList中下一個元素的對象的內容。

我在onClickListeners內遇到了全局變量的問題,但是我使用輔助方法解決了它們,但是這次不起作用,因為我需要在button事件中增加迭代的值。

你們能否請我提供建議或告訴我我做錯了什么?

希望您能理解我的問題,如果我不能很好地解釋我的情況,對不起,如果我發布的內容不夠,請隨時提出任何問題並要求提供更多代碼塊。

在此先感謝你們,我感謝您能給我所有的幫助!


從我的數據庫中獲取數據並將其存儲到arraylist中

private ArrayList<Exercises> getExercisesSelectedPlan() {
    ArrayList<ProgramExercises> arrayList_programExercises = new ArrayList<();
    ArrayList<Exercises> arrayList_exercises = new ArrayList<>();
    Button btnNext = (Button) findViewById(R.id.btnFinishAquecimento);

    //with the id of the selected plan, select all the exercises from the plan and load them into the layout
    int idProgram = getIdPlan();

    DatabaseHelper databaseHelper = new DatabaseHelper(this);
    SQLiteDatabase db = databaseHelper.getWritableDatabase();
    String queryProgramExercises = "SELECT * FROM PROGRAM_EXERCISES WHERE PROGRAM_ID_PROGRAM = " + "'" + idProgram + "'" + " ORDER BY ORDER_EX ASC";
    Cursor cursorProgramExercises = db.rawQuery(queryProgramExercises, null);
    int numRows = cursorProgramExercises.getCount();
    if (numRows > 0) {
        cursorProgramExercises.moveToFirst();
        while (numRows > 0) {
            for (int i = 0; i < cursorProgramExercises.getCount(); i++) {
                ProgramExercises nProgramExercises = new ProgramExercises();
                nProgramExercises.setIdProgramExercises(cursorProgramExercises.getInt(0));
                nProgramExercises.setOrder(cursorProgramExercises.getString(1));
                nProgramExercises.setRepetition(cursorProgramExercises.getInt(2));
                nProgramExercises.setIdExercises(cursorProgramExercises.getInt(3));
                arrayList_programExercises.add(nProgramExercises);
                numRows--;
            }
        }
    }

    //for each select result from program_exercises i have to select the exercise with the id correspondent to nProgramExercies.getidExercises
    for (int i = 0; i < arrayList_programExercises.size(); i++) {
        String queryExercises = "SELECT * FROM EXERCISES WHERE ID_EXERCISES = " + "'" + arrayList_programExercises.get(i).getIdExercises() + "'";
        Cursor cursorExercises = db.rawQuery(queryExercises, null);
        cursorExercises.moveToNext();

        if (cursorExercises.getCount() > 0) {
            Exercises exercises = new Exercises();
            for (int j = 0; j < cursorExercises.getCount(); j++) {
                exercises.setIdExercises(cursorExercises.getInt(0));
                exercises.setMedia(cursorExercises.getString(1));
                exercises.setDesignation(cursorExercises.getString(2));
                exercises.setIdExercisesPhase(cursorExercises.getInt(3));
                arrayList_exercises.add(exercises);
                cursorExercises.moveToNext();
            }
            cursorExercises.close();
        }
    }

    cursorProgramExercises.close();
    db.close();
    databaseHelper.close();
}

單擊btnNext時,我想更改textview的內容並增加迭代的位置

 public void prepareExercise(final ArrayList<Exercises> exercises) {
    setContentView(R.layout.activity_execute_ex_warmup);

    TextView txtPrepare = (TextView) findViewById(R.id.tvAquecimento);
    ImageView imageExercise = (ImageView) findViewById(R.id.ivAquecimento);
    Button btnNext = (Button) findViewById(R.id.btnFinishAquecimento);
    txtPrepare.setText(exercises.get(1).getDesignation());
    imageExercise.setImageResource(R.drawable.imgTest);

    for (int i = 0; i < exercises.size(); i++) {
        if (exercises.get(i).getIdExercisesPhase() == 1) {
            txtPrepare.setText(exercises.get(i).getDesignation());
            System.out.println("------ TEST" + exercises.get(i).getDesignation());
        }
    }


    //Click Next Button
    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //for (int i = 1; i < exercises.size(); i++) {
            //TextView txtPrepare = (TextView) findViewById(R.id.tvAquecimento);
            //txtPrepare.setText(exercises.get(finalI).getDesignation());
            //}
            //executeExercise(); //next Exercise
        }
    });
}

我如何調用先前的方法

        prepareExercise(getExercisesSelectedPlan());

希望我理解正確。

如果您只是想在每次單擊按鈕時更新視圖,最簡單的方法就是創建一個變量並存儲數組列表的位置。

public int listIncrement = 0;
private TextView txtPrepare;
private ImageView imageExercise;

然后在您的prepareExercise()方法中

btnNext.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(listIncrement <= excersises.size()) {
            executeExercise(excersises, listIncrement); //next Exercise
            listIncrement++;
        }
    }
});

然后在executeExercise(ArrayList Exercises,int position)//猜測的方法名稱中,可以隨意

txtPrepare.setText(exercises.get(position).getDesignation());
imageExercise.setImageResource(R.drawable.imgTest);

暫無
暫無

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

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