在 Zxing 扫描后设置 TextView 没有做任何事情
Setting a TextView after Zxing scan is not doing anything
我有一个正在尝试运行的简单应用程序。问题是我无法在设置 TextView 后显示它。我使用 Zxing 扫描条形码,我可以设置 TextView 但是它没有显示在我的 phone 上。它只显示默认值。
当我说 "set" 时,我的意思是在 运行 textview.setText() 之后,textview 的值确实发生了变化,但是屏幕上的值没有发生变化。
我添加了一些评论来帮助您了解应用程序的位置。
scanCode 是我试图设置文本视图的地方。我也尝试过使用 runOnUiThread,结果仍然相同
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
public class MainActivity extends AppCompatActivity {
TextView itemNameTextView;
TextView itemPriceTextView;
Button scanButton;
ZXingScannerView scannerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
itemNameTextView = findViewById(R.id.itemNameTextView);
itemPriceTextView = findViewById(R.id.itemPriceTextView);
scanButton = findViewById(R.id.scanButton);
scannerView = new ZXingScannerView(this);
}
public void scanCode(View view){
setContentView(scannerView);
scannerView.startCamera();
scannerView.setResultHandler(new ZXingScannerView.ResultHandler() {
@Override
public void handleResult(Result result) {
setContentView(R.layout.activity_main);
//I have the correct Result here
Log.i("Test ScanResult", String.valueOf(result));
//correct Default textview value stored here
Log.i("Test Mainactivity", itemNameTextView.getText().toString());
//Set the textview
itemNameTextView.setText(String.valueOf(result));
//Sets the TextView correctly just does not display on screen
Log.i("Test Mainactivity", itemNameTextView.getText().toString());
}
});
}
@Override
protected void onPause() {
super.onPause();
scannerView.stopCamera();
}
}
在您的代码中,您正在调用 setContentView(scannerView);
in scanCode(View view) 方法,该方法会将 scannerview 设置为您的 Activity 布局,并且您之前在 onCreate() 方法中设置的布局无效并且您的 texView 将不会更新。
这是实现 ZXING 扫描器的正确方法
setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
});
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
这是完整的例子
我有一个正在尝试运行的简单应用程序。问题是我无法在设置 TextView 后显示它。我使用 Zxing 扫描条形码,我可以设置 TextView 但是它没有显示在我的 phone 上。它只显示默认值。
当我说 "set" 时,我的意思是在 运行 textview.setText() 之后,textview 的值确实发生了变化,但是屏幕上的值没有发生变化。
我添加了一些评论来帮助您了解应用程序的位置。
scanCode 是我试图设置文本视图的地方。我也尝试过使用 runOnUiThread,结果仍然相同
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
import com.google.zxing.Result;
import me.dm7.barcodescanner.zxing.ZXingScannerView;
public class MainActivity extends AppCompatActivity {
TextView itemNameTextView;
TextView itemPriceTextView;
Button scanButton;
ZXingScannerView scannerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
itemNameTextView = findViewById(R.id.itemNameTextView);
itemPriceTextView = findViewById(R.id.itemPriceTextView);
scanButton = findViewById(R.id.scanButton);
scannerView = new ZXingScannerView(this);
}
public void scanCode(View view){
setContentView(scannerView);
scannerView.startCamera();
scannerView.setResultHandler(new ZXingScannerView.ResultHandler() {
@Override
public void handleResult(Result result) {
setContentView(R.layout.activity_main);
//I have the correct Result here
Log.i("Test ScanResult", String.valueOf(result));
//correct Default textview value stored here
Log.i("Test Mainactivity", itemNameTextView.getText().toString());
//Set the textview
itemNameTextView.setText(String.valueOf(result));
//Sets the TextView correctly just does not display on screen
Log.i("Test Mainactivity", itemNameTextView.getText().toString());
}
});
}
@Override
protected void onPause() {
super.onPause();
scannerView.stopCamera();
}
}
在您的代码中,您正在调用 setContentView(scannerView);
in scanCode(View view) 方法,该方法会将 scannerview 设置为您的 Activity 布局,并且您之前在 onCreate() 方法中设置的布局无效并且您的 texView 将不会更新。
这是实现 ZXING 扫描器的正确方法
setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
});
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
这是完整的例子