[英]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.