首页 > 解决方案 > 设置文本编辑文本

问题描述

我正在开发一个 QR 扫描仪应用程序。成功扫描后,扫描的信息将进入警报框。从那里,我需要信息才能转到 EditText 字段或跳过整个警报对话框。必须转到 EditText 的结果在下面的函数中。

public class MainActivity extends Activity implements ZXingScannerView.ResultHandler {
private ZXingScannerView mScannerView;


EditText editText;
@SuppressLint("CutPasteId")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = findViewById(R.id.editText4);


    EditText delete2;
    Button button3;



    button3 = findViewById(R.id.button3);
    delete2 = findViewById(R.id.editText2);

    final EditText finalEdittext = delete2;
    button3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            //Clear EditText
            finalEdittext.getText().clear();

        }
    });

    EditText delete4;
    Button button4;

    delete4 = findViewById(R.id.editText4);
    button4 = findViewById(R.id.button4);

    final EditText finalEdittext1 = delete4;
    button4.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            //Clear EditText
            finalEdittext1.getText().clear();

        }
    });
}


public void onClick(View v){
    mScannerView = new ZXingScannerView(this);
    setContentView(mScannerView);
    mScannerView.setResultHandler(this);
    mScannerView.startCamera();


}

@Override
protected void onPause() {
    super.onPause();
    mScannerView.stopCamera();

}



@Override
public void handleResult(Result result) {
    //handle result
    Log.v("handleResult", result.getText());


    //editText.setText(result.toString());
   // editText.invalidate();
    mScannerView.stopCamera(); //setContentView(R.layout.activity_main);
    //resume scanning
    //mScannerView.resumeCameraPreview(this);
    updateScannerData(1,result.getText());



}



public void updateScannerData(int scanType, String scannedCode){
   editText.setText(scannedCode);
   //editText.invalidate();
   //editText.requestLayout();

    //finish();
    //startActivity(getIntent());
    this.recreate();


    }

}

我只使用一个主要活动,这是结果必须去的 EditText 的 XML。

<EditText
    android:id="@+id/editText2"
    android:layout_width="match_parent"
    android:layout_height="61dp"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="197dp"
    android:ems="10"
    android:hint="@string/scan_order"
    android:inputType="textPersonName"
    android:visibility="visible"
    tools:backgroundTint="@android:color/holo_red_light" />

任何帮助是极大的赞赏。提前致谢。

标签: javaandroidandroid-studio

解决方案


这里可以有不止一种方法,您可以:

Edittext edt = (EditText)findViewById(R.id.viewid);
edt.setText(result.getText());

或者,如果您需要多次频繁更新此文本视图,请在主活动 updateScannerEditText(String value) 中创建方法;并从您的片段中调用它。

如果您的主要活动本身有 handleResult() ,只需在活动中创建方法:

@Override  // move your setContentView() method inside activity oncreate()
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

public void handleResult(Result result) {
   //handle result
Log.v("handleResult", result.getText());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Scan Result");
builder.setMessage(result.getText());
AlertDialog alertDialog = builder.create();
alertDialog.show();

mScannerView.stopCamera();
updateScannerData(1,result.gettext()); 


//resume scanning
mScannerView.resumeCameraPreview(this);

}

方法实现:

private void updateScannerData(int scanType, String scannedCode){
edt.setText(scannedCode);//edt is the editTextView that you have declared in you xml.
}

希望能帮助到你。


推荐阅读