簡體   English   中英

如何獲取在另一個 class 中以編程方式創建的視圖 ID?

[英]How to get a view id created programmatically in another class?

我想找到從另一個 class 中的可運行集以編程方式創建的視圖的 ID,並傳遞給搜索視圖的 class。

這個想法是只要沒有輸入正確的密碼就鎖定應用程序。 因此,當用戶在主菜單上按下“解鎖”按鈕時,會提示 ViewDialog class 中的覆蓋對話框。 ViewDialog 中的 showUnlockDialog() 是 function 創建密碼 EditText 並將其添加到 R.layout.custom_dialog 中的基本對話框集。 用戶輸入密碼並單擊運行可運行程序以獲取 EditText 內容以檢索輸入的密碼的按鈕。

public class MainMenu extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        ....

        Runnable runnable;
        View v;

        runnable = new Runnable(){
            public void run(){
                Runnable runnable = new Runnable(){
                    public void run(){
                        EditText mdp = findViewById((int)1);
                        Log.d("test", mdp.getText().toString());
                    }
                };
                ViewDialog alert = new ViewDialog();
                alert.showUnlockDialog(MainMenu.this, runnable);
            }
        };

        v = findViewById(R.id.button);
        v.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View v) {
                runnable.run();
            }
        });

        ....
    }
}

public class ViewDialog extends AppCompatActivity{
    Button positiveButton;
    Button negativeButton;

    ....

    public void showUnlockDialog(Activity activity, Runnable callback){
        final Dialog dialog = new Dialog(activity);
        dialog.setCancelable(true);
        dialog.setContentView(R.layout.custom_dialog);

        ....

        ConstraintLayout constraintLayout = new ConstraintLayout(activity);
        ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
        constraintLayout.setLayoutParams(params);

        EditText password = new EditText(activity);
        password.setId((int)1);

        constraintLayout.addView(password);

        LinearLayout layout = (LinearLayout) dialog.findViewById(R.id.customDialogLinLayout);
        layout.addView(constraintLayout);

        setDialog1Button(activity, dialog, callback);

        dialog.show();
    }

    public void setDialog1Button(Activity activity, final Dialog dialog, final Runnable callback){
        positiveButton = new Button(activity);
        positiveButton.setText("OK");

        positiveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(callback != null) {
                    callback.run();
                }
                dialog.dismiss();
            }
        });

        LinearLayout layout = (LinearLayout) dialog.findViewById(R.id.customDialogLinLayout);
        layout.addView(positiveButton);
    }

    ....
}

單擊驗證按鈕時,密碼為 null in

    EditText password = findViewById((int)1);
    Log.d("test", password.getText().toString());

並提示如下錯誤:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.megacom.inventaire, PID: 18759
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
        at com.megacom.inventaire.MainMenu$1$1.run(MainMenu.java:55)
        at com.megacom.inventaire.ViewDialog$1.onClick(ViewDialog.java:107)
        at android.view.View.performClick(View.java:5610)
        at android.view.View$PerformClick.run(View.java:22265)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

您可以使用意圖傳遞該視圖,也可以將該視圖設為常量以更改其他活動或 class 的視圖值

暫無
暫無

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

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