簡體   English   中英

在不同的活動中使用相同的“ OnClickListener”

[英]Using the same 'OnClickListener' in different Activities

我正在定義和使用一個自定義的OnClickListener (即MyOnClickListener ),此片段在我當前正在使用的Fragment文件中。

繼續編寫代碼,我意識到在另一個恰好在另一個Activity中的 Fragment中, 我也需要相同的偵聽器

因此,我創建了文件MyOnClickListener.java復制之前在第一個Fragment中使用的所有代碼,但是現在出現以下錯誤:

無法解析方法“ getActivity()”

無法解析方法“ getResources()”

注意:我在stackoverflow上讀到,一種解決方案可能只是編寫MainActivity.this來代替getActivity() ,但是在我的情況下,我需要在兩個不同的活動中使用相同的方法。 我該怎么辦?

編輯:這是MyOnClickListener的代碼, MyOnClickListener需要顯示一個圖標矩陣:

class MyOnClickListener implements View.OnClickListener {

    private LabeledButton labeledButton;

    MyOnClickListener(LabeledButton labeledButton) {
    super();
    this.labeledButton = labeledButton;
}

@Override
public void onClick(View view) {
    Button iconButton = (Button) view;
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // ERROR HERE
    LayoutInflater layoutInflater = getActivity().getLayoutInflater(); // ERROR HERE
    final View viewLayout = layoutInflater.inflate(R.layout.dialog_matrix_icons, null);
    builder.setView(viewLayout);
    builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            // Do nothing
        }
    });
    final AlertDialog alertDialog = builder.create();

    // Set-up listeners of icon button
    Button imageButtons[][] = new Button[3][3];
    int i;
    int j;
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            Resources res = getResources(); // ERROR HERE
            TypedArray icons = res.obtainTypedArray(R.array.listIcon);
            int idDrawable = icons.getResourceId(i + 3 * j, 1); // ERROR HERE
            icons.recycle();
            LinearLayout grid = (LinearLayout) viewLayout;
            LinearLayout row = (LinearLayout) grid.getChildAt(i);
            imageButtons[i][j] = (Button) row.getChildAt(j); // Retrieve the right image in the grid
            imageButtons[i][j].setBackgroundResource(idDrawable);
            String nameIcon = getResources().getResourceEntryName(idDrawable); // ERROR HERE
            ImageOnClickListener imageOnClickListener = new ImageOnClickListener(iconButton, alertDialog, idDrawable, nameIcon, labeledButton);
            imageButtons[i][j].setOnClickListener(imageOnClickListener);
        }
    }
    alertDialog.show();
}

}

用您的構造函數替換

MyOnClickListener(LabeledButton labeledButton,Context context) {
   super();
   this.labeledButton = labeledButton;
   this.context = context;
}

如果沒有,請確保在MyOnClickListenerClass內創建上下文變量,否則將在構造函數行發現錯誤。然后可以將所有getActivity()替換為context

初始化MyOnClickListener時,請確保傳遞context參數

為您的充氣機使用

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

我在stackoverflow上讀到,一種解決方案可能只是編寫MainActivity.this來代替getActivity(),但是在我的情況下,我需要在兩個不同的活動中使用相同的方法。 我該怎么辦?

如果將OnClickListener放在自己的編譯單元中,則不能使用在Stackoverflow上閱讀過的東西 MainActivity.this ,指的是一個具體的和當前實例MainActivity (拜托,看看它是什么關鍵字this手段在Java)。 如果需要上下文,可以在onClick回調View view中獲取的參數進行檢索。 在這里閱讀更多

暫無
暫無

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

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