当前位置: 首页 > 知识库问答 >
问题:

我有一个包含编辑文本的片段,在我更改片段并将其更改回去后,编辑文本不起作用

韩智敏
2023-03-14

这是我的片段的代码:

public class MainFragment extends Fragment {

private final AnimEffect forwardAnimation = AnimEffect.LEFT_TO_RIGHT;
private String couponNumber;
private EditText couponET;
@Override
public void onResume() {
    ((MainActivity) getActivity()).toggleBtn(false);
    super.onResume();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.mainfragment, container, false);
    ImageButton profile = (ImageButton) view.findViewById(R.id.Profile);
    ImageButton scan = (ImageButton) view.findViewById(R.id.Scan);
    Button validate = (Button) view.findViewById(R.id.Validate);
    couponET = (EditText) view.findViewById(R.id.couponET);

    OnClickListener profileListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MainActivity) getActivity()).navigateTo(ProfileFragment.class, forwardAnimation);
        }
    };
    profile.setOnClickListener(profileListener);
    OnClickListener scanListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            ((MainActivity) getActivity()).navigateTo(ScannerFragment.class, forwardAnimation);
        }
    };
    scan.setOnClickListener(scanListener);

    OnClickListener validateListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            String response = couponET.getText().toString();
            if (response.contentEquals("ok")) {
                ((MainActivity) getActivity()).navigateTo(OKResponseFragment.class, forwardAnimation);
            }

        }
    };
    validate.setOnClickListener(validateListener);

    return view;
}

@Override
public void onStart() {
    super.onStart();
    if ((couponET != null) && (couponNumber != null)) {
        couponET.setText(couponNumber);
    }
}

public void setCouponNumber(String number) {
    couponNumber = number;
    if (couponET != null) {
        couponET.setText(number);
    }
}

public void alert() {
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.warningdialog);
    dialog.setCancelable(true);
    Button ok = (Button) dialog.findViewById(R.id.cancel);
    ok.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    dialog.show();
}

}

现在,第一次,编辑文本完美地工作,我可以使用它,可以在它上面写,任何东西。如果我改变了片段,然后回来,我不能什么都不做。如果我按下编辑文本,键盘不会出现。甚至更多,如果我不;更改片段后,不要关闭键盘,这样当我返回时,我会打开键盘,如果我按下编辑文本,然后在键盘上写,什么都不会出现。

这是我的 FragmentActivity,如果它有帮助的话:

public class MainActivity extends android.support.v4.app.FragmentActivity {

public static boolean scanner_active;

private Fragment f;

public static Intent login;

SharedPreferences settings;

private AnimEffect backPressAnimation = AnimEffect.LEFT_TO_RIGHT;

private ImageButton backButton;

@Override
public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    init();
    login = new Intent(MainActivity.this, WelcomeActivity.class);

}

private void init() {
    backButton = (ImageButton) findViewById(R.id.backButton);
    OnClickListener backButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            Class<?> previousFragment = getPreviousScreen();
            if (previousFragment != null) {
                navigateTo(previousFragment, backPressAnimation);
            } else {
                finish();
                if(!Constants.remind){
                    startActivity(login);
                }
            }
        }
    };
    backButton.setOnClickListener(backButtonListener);
    String name;
    TextView nameTV = (TextView) findViewById(R.id.nameTV);
    if (Constants.remind) {
        settings = getSharedPreferences("PrefFile", 0);
        name = settings.getString("email", null);
    } else {
        name = Constants.email;
    }
    nameTV.setText(name);
    navigateTo(MainFragment.class, AnimEffect.FADE_IN);
}

@Override
public void onBackPressed() {
    Class<?> previousFragment = getPreviousScreen();
    if (previousFragment != null) {
        navigateTo(previousFragment, backPressAnimation);
    } else {
        finish();
        if(!Constants.remind){
            startActivity(login);
        }
    }
}

public void navigateTo(Class<?> fragmentClass, AnimEffect effect) {
    removeOldFragment(effect);
    int animIn = Util.getInAnimation(effect);
    try {
        f = (Fragment) fragmentClass.newInstance();
    } catch (Exception e) {
        LogService.err("navigate", e.getMessage(), e, LogService.LOG_LEVEL_LITE);
    }

    if (f != null) {
        getSupportFragmentManager().beginTransaction().disallowAddToBackStack().setCustomAnimations(animIn, 0).add(R.id.fragment, f, fragmentClass.getSimpleName()).commitAllowingStateLoss();
    }
}

public Class<?> getPreviousScreen() {
    if ((f instanceof MainFragment) && f.isAdded()) {
        return null;
    } else if ((f instanceof ProfileFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof HelpFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof ScannerFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof OKUserResponseFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    } else if ((f instanceof OKResponseFragment) && f.isAdded()) {
        backPressAnimation = AnimEffect.LEFT_TO_RIGHT;
        return MainFragment.class;
    }
    return null;
}

private void removeOldFragment(AnimEffect effect) {
    if ((f != null) && f.isAdded()) {
        int animOut = Util.getOutAnimation(effect);
        getSupportFragmentManager().beginTransaction().setCustomAnimations(0, animOut).remove(f).commitAllowingStateLoss();
        getSupportFragmentManager().executePendingTransactions();
    }
}

public void toggleBtn(boolean b) {
    backButton.setEnabled(b);
    if(b){
        backButton.setImageResource(R.drawable.back);
    }else{
        backButton.setImageResource(R.drawable.besmart2);
    }

}

public void setCouponText(String text) {
    // TODO Auto-generated method stub
    navigateTo(MainFragment.class, backPressAnimation);
    if ((f != null) && (f instanceof MainFragment)) {
        ((MainFragment) f).setCouponNumber(text);
    }
}

}

编辑:它适用于4.x,但不适用于以前的操作系统,如2.3.5或3.2

共有1个答案

斜单鹗
2023-03-14

我看到,如果我按下validate按钮,如果edittext不起作用,则会出现警报,然后如果我取消警报,则会起作用。因此,我所做的是,向警报传递一个布尔参数,以便如果为真,则调用dialog.disclose();。然后我调用onCreateView()函数:

alert(true);

这会创建一个警报,并在不显示警报的情况下快速将其取消,从而使edittext正常工作

 类似资料:
  • 我正试图在一个需要过滤非数字字符和点的编辑文本上实现一个过滤器。我可以使用编辑文本或输入类型的数字标签,但似乎设备之间有轻微的差异,就像有些设备即使在编辑文本中过滤它们也显示点字符。 下面是afterTextChanged方法 这是输出结果 如您所见,在我删除第一个“h”后,当我输入另一个h时,字符串变为“66hh”,其中它应该是“66h”,因为我已经删除了第一个h。什么原因会阻止我对可编辑的更改

  • 问题内容: 我有一个 可编辑的 JComboBox,无论何时通过键入或选择更改文本,我都想在其中进行一些操作。在这种情况下,文本是一个模式,我想验证该模式是否有效,并显示导致某些测试数据匹配的内容。 完成显而易见的操作后,附加一个ActionHandler,我发现,对于键入而言,该事件充其量似乎是不可靠的(选择很好)。而当它 做 火打字的结果,文字检索(使用getEditor()。getItem(

  • 我在中有一个,底线颜色不是我想要的,我不知道如何更改它。 这是我到目前为止所拥有的。 出于某种不起作用的奇怪原因,应该是它。

  • 我有一个运行几个片段的Mainactive(MA),它们不会相互交谈,而是通过“onClick”android机制与MA通信。由微调器选择和“onClick”按钮驱动,我们到达MA的Retrieve病人记录方法。 我执行一个数据库调用以获取所选的db记录(根据注释行),然后测试是否存在一个existingPatient片段,我打算将数据库记录的各个字段放入其中,因为它本质上是一个表单。在未找到“n

  • 我有一个片段,它添加了一个选项到选项菜单。当单击此选项时,将打开一个对话框片段。对话框将原始片段设置为其目标片段。如果在对话片段打开时没有发生方向变化,则目标片段与预期的一样,但是在方向变化之后,目标片段被设置为对话片段本身,而不是先前设置的片段。结果,当试图将目标片段强制转换为被设置为目标片段的片段时,我得到了一个classCastException。我需要在对话框中获取目标片段,因为它实现了一

  • 我正在使用设计库中新的TextInputLayout。我可以让它显示并改变浮动标签的颜色。不幸的是,它不会将文本改为大写。 我不想更改我的字符串.xml,因为我只想让这个标签是大写的。我尝试过在布局,样式和编程方式中更改文本AllCaps,但是EditText提示的情况始终与字符串完全相同.xml。 下面是我的TextInputLayout和EditText的XML 下面是我为TextInputL