将 'findViewById(R.id.)' 转换为 'Button' 是多余的
Casting 'findViewById(R.id.)' to 'Button' is redundant
所以我正在尝试构建一个二维码扫描器和生成器。
这是我的扫描器代码:
private Button scan_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reader);
scan_btn = (Button) findViewById(R.id.scan_btn);
final Activity activity = this;
scan_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
IntentIntegrator integrator = new IntentIntegrator(activity);
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
integrator.setPrompt("Scan");
integrator.setCameraId(0);
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(false);
integrator.initiateScan();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null){
if(result.getContents()==null){
Toast.makeText(this, "You cancelled the scanning", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, result.getContents(),Toast.LENGTH_LONG).show();
}
}
else {
super.onActivityResult(requestCode, resultCode, data);
}
}}
我收到这样的警告:
将 'findViewById(R.id.scan_btn)' 转换为 'Button' 是多余的
会影响我的应用程序吗?因为当我试图打开我的应用程序时,它突然崩溃了。
更新:
这是我的生成器代码:
public class GeneratorActivity extends AppCompatActivity {
EditText text;
Button gen_btn;
ImageView image;
String text2Qr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_generator);
text = findViewById(R.id.text);
gen_btn = findViewById(R.id.gen_btn);
image = findViewById(R.id.image);
gen_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
text2Qr = text.getText().toString().trim();
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try{
BitMatrix bitMatrix = multiFormatWriter.encode(text2Qr, BarcodeFormat.QR_CODE,200,200);
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
image.setImageBitmap(bitmap);
}
catch (WriterException e){
e.printStackTrace();
}
}
});
}}
我的 'buttons' 代码的 MainActivity:
public class MainActivity extends AppCompatActivity {
Button gen, scan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gen = findViewById(R.id.gen);
scan = findViewById(R.id.scan);
gen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent gIntent = new Intent(MainActivity.this, GeneratorActivity.class);
startActivity(gIntent);
}
});
scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent rIntent = new Intent(MainActivity.this, ReaderActivity.class);
startActivity(rIntent);
}
});
}}
更新:
冗余问题没有错。此案例已解决 xml 代码拼写错误。所以它已经回答了我的一个问题。谢谢。请期待我的其他问题。我真的需要它来尽快完成我的项目。
试一试,按如下方式更改代码:
scan_btn = findViewById(R.id.scan_btn);
它不会影响您的代码。这是 Android studio 的一项新功能,可直接将小部件从您的 XML 映射到 Java 代码。您的应用可能因任何其他原因崩溃
从 API 26 开始,findViewById 对其 return 类型使用推理,因此您不再需要强制转换。
旧定义:
Button btn = (Button) findViewById(R.id.btn)
新定义:
<T extends View> T findViewById(R.id.value)
所以如果你编译的sdk至少是26,就说明你可以利用这个。无需铸造。
所以我正在尝试构建一个二维码扫描器和生成器。
这是我的扫描器代码:
private Button scan_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reader);
scan_btn = (Button) findViewById(R.id.scan_btn);
final Activity activity = this;
scan_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
IntentIntegrator integrator = new IntentIntegrator(activity);
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
integrator.setPrompt("Scan");
integrator.setCameraId(0);
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(false);
integrator.initiateScan();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if(result != null){
if(result.getContents()==null){
Toast.makeText(this, "You cancelled the scanning", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, result.getContents(),Toast.LENGTH_LONG).show();
}
}
else {
super.onActivityResult(requestCode, resultCode, data);
}
}}
我收到这样的警告: 将 'findViewById(R.id.scan_btn)' 转换为 'Button' 是多余的
会影响我的应用程序吗?因为当我试图打开我的应用程序时,它突然崩溃了。
更新:
这是我的生成器代码:
public class GeneratorActivity extends AppCompatActivity {
EditText text;
Button gen_btn;
ImageView image;
String text2Qr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_generator);
text = findViewById(R.id.text);
gen_btn = findViewById(R.id.gen_btn);
image = findViewById(R.id.image);
gen_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
text2Qr = text.getText().toString().trim();
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try{
BitMatrix bitMatrix = multiFormatWriter.encode(text2Qr, BarcodeFormat.QR_CODE,200,200);
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
image.setImageBitmap(bitmap);
}
catch (WriterException e){
e.printStackTrace();
}
}
});
}}
我的 'buttons' 代码的 MainActivity:
public class MainActivity extends AppCompatActivity {
Button gen, scan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gen = findViewById(R.id.gen);
scan = findViewById(R.id.scan);
gen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent gIntent = new Intent(MainActivity.this, GeneratorActivity.class);
startActivity(gIntent);
}
});
scan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent rIntent = new Intent(MainActivity.this, ReaderActivity.class);
startActivity(rIntent);
}
});
}}
更新: 冗余问题没有错。此案例已解决 xml 代码拼写错误。所以它已经回答了我的一个问题。谢谢。请期待我的其他问题。我真的需要它来尽快完成我的项目。
试一试,按如下方式更改代码:
scan_btn = findViewById(R.id.scan_btn);
它不会影响您的代码。这是 Android studio 的一项新功能,可直接将小部件从您的 XML 映射到 Java 代码。您的应用可能因任何其他原因崩溃
从 API 26 开始,findViewById 对其 return 类型使用推理,因此您不再需要强制转换。
旧定义:
Button btn = (Button) findViewById(R.id.btn)
新定义:
<T extends View> T findViewById(R.id.value)
所以如果你编译的sdk至少是26,就说明你可以利用这个。无需铸造。