Tôi đang cố gắng thực hiện một cú nhấp chuột dài trong một EditText
, nhưng khi tôi nhấp vào Dài, tôi nhận được lỗi bên dưới. Tôi muốn có thể thực hiện một cú nhấp chuột dài để có được bối cảnh Copy/Paste/Select All bật lên để người dùng có thể dán văn bản vào hộp.Nhấn và giữ Sửa lỗi văn bản: Không thể thêm cửa sổ
Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running?
EditText nằm trong ScrollView trong cửa sổ bật lên. Vì vậy, khi lỗi xảy ra, tôi hiện đang hoạt động trên một hoạt động với PopupWindow mở và tôi làm một Long Click trong EditText được chứa trên PopupWindow.
Gradle Cài đặt
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
applicationId 'com.accoservice.cico'
minSdkVersion 17
targetSdkVersion 25
versionCode 37
versionName '4.2.6'
multiDexEnabled true
}
Layout Chứa các EditText:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/outer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#73000000">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="100dp"
android:layout_marginBottom="5dp"
android:background="#ffffff"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginTop="15dp"
android:singleLine="true"
android:text="@string/note_msg"
android:textColor="#62CCFE"
android:textSize="18sp" />
<View
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_marginBottom="5dp"
android:layout_marginTop="10dp"
android:background="#62CCFE" />
<ScrollView
android:id="@+id/sv_resolution_note"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp">
<EditText
android:id="@+id/et_note_msz"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/view"
android:layout_alignParentTop="true"
android:scrollbars="vertical"
android:focusable="true"
android:gravity="left"
android:maxLines="20"
android:hint="@string/write_note"
android:inputType="textFilter|textMultiLine|textCapSentences"
android:singleLine="false"
android:textIsSelectable="true"
android:enabled="true"
android:longClickable="true" />
</ScrollView>
<View
android:id="@+id/view"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_above="@+id/send_note"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@android:color/darker_gray" />
<Button
android:id="@+id/send_note"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/viewss"
android:layout_gravity="center"
android:background="@color/white"
android:text="@string/add_note" />
<View
android:id="@+id/viewss"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@android:color/darker_gray" />
</LinearLayout>
</LinearLayout>
Pop lên cửa sổ:
@Override
public void onClick(View v) {
noteDialog(getResources().getString(R.string.laborentryresolutionstart), tv_labor_entry_resolution_start);
}
public void noteDialog(String noteTitle, final TextView tv_resolution_note)
{
LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
final View popupView;
popupView = layoutInflater.inflate(R.layout.resolution_note, null);
TextView title = (TextView) popupView.findViewById(R.id.title);
title.setText(noteTitle);
final EditText editText = (EditText) popupView.findViewById(R.id.et_note_msz);
final PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
popupWindow.update();
popupWindow.setFocusable(true);
popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
editText.setEnabled(false);
editText.setEnabled(true);
editText.setFocusable(true);
editText.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//ADD HERE ABOUT CUT COPY PASTE
// TODO Auto-generated method stub
return false;
}
});
if (!tv_resolution_note.getText().toString().isEmpty()) {
editText.setText(tv_resolution_note.getText().toString());
}
Button btnDone = (Button) popupView.findViewById(R.id.send_note);
LinearLayout outer_layout = (LinearLayout) popupView.findViewById(R.id.outer_layout);
outer_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
popupWindow.dismiss();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0);
}
});
System.gc();
try {
btnDone.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
EditText noteMsz = (EditText) popupView.findViewById(R.id.et_note_msz);
tv_resolution_note.setText(noteMsz.getText().toString());
popupWindow.dismiss();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.RESULT_HIDDEN, 0);
invalidateOptionsMenu();
}
});
} catch (Exception e) {
}
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable(null, ""));
popupWindow.showAsDropDown(tv_labor_sym_entry, 0, -60);
popupWindow.update();
}
Bạn có đang gọi mã này trong Hoạt động không? Một dịch vụ? Bạn có chắc chắn bạn không bị tắt màn hình nếu một Hoạt động? Thông báo đó thường xảy ra khi bạn cố gắng khởi chạy một giao diện người dùng từ một Dịch vụ hoặc khi bạn cố gắng bật lên một hộp thoại sau khi hoạt động được thực hiện. –
Tôi đang gọi mã cho cửa sổ bật lên trong khi đang hoạt động. Hoạt động hiện đang chạy, cửa sổ bật lên đang hoạt động và tôi nhấn và giữ trong EditText và nhận được lỗi. – Adam
Tôi chạy mã của bạn với sửa đổi nhỏ trên một trình giả lập chạy API 24 và nó hoạt động OK cho tôi. Đó là để nói rằng nó không phải là crashing và người nghe báo chí dài được gọi như mong đợi. Bạn có thể cung cấp thêm một số thông tin về cách bạn đang thiết lập mọi thứ không? API bạn đang thử nghiệm? [Ở đây] (https://gist.github.com/Cheticamp/08ebef491a727a12577a7e9790eaa752) là một ý chính của hoạt động tôi đã sử dụng trong trường hợp nó giúp bạn. – Cheticamp