【发布时间】:2021-10-17 04:51:14
【问题描述】:
我正在制作这个电子商务应用, 而且,我想要这种行为。 哪个是- 开场时,MainActivity中会有pitures。 还有一个搜索框。
当您单击图片时,它将带您进入 MainActivity2,并且此活动中有一个 ImageView,它将变为与我在 MainActivity 中单击的图片相同的图片。
和
当您在 MainActivity 的搜索框中搜索内容时, 如果您搜索的文本与 MainActivity2 中 arraylist 的字符串对象匹配, 它将用arraylist的字符串对象的对应图像更改MainActivity2的ImageView。
我希望,我犯了最小的语法错误,让你理解我的问题。 ????
无论如何, 对于第一种情况- 我尝试通过使用 On touchListeners、Intenets 和布尔值来完成这项工作。
正如您在下面的代码中看到的, 触摸我的 ImageView(iBtn1) 将触发 Intent intent1,使布尔 i1 =true,然后将布尔值发送到名为“t1”的下一个活动。
还有 , 对于第二种情况—— 我尝试使用 OnClickListeners、Intenets、arraylists 和布尔值。
首先, 我将 Edittext(input) 更改为字符串。 点击搜索按钮(igo), 它会触发 Intent 意图, 然后它将输入的字符串数据作为“eText”发送,并发送布尔数据x=true,作为“x”。
public class MainActivity extends AppCompatActivity {
EditText input;
ImageView iBtn1;
TextView tName, tPrice, tDescription;
ImageView iImage;
Button igo;
String eText;
boolean i1,x;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
i1=false;
x=false;
igo=findViewById(R.id.go);
iBtn1=findViewById(R.id.Btn1);
input=findViewById(R.id.edittext);
eText=input.getText().toString();
igo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
x=true;
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("eText",eText);
intent.putExtra("x",x);
startActivity(intent);
}
});
iBtn1.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setPressed(true);
iBtn1.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.ectangle_31_1));
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
iBtn1.setBackground(ContextCompat.getDrawable(getApplicationContext(),R.drawable.ectangle_31));
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
i1=true;
Intent intent1=new Intent(MainActivity.this,MainActivity2.class);
intent1.putExtra("t1",i1);
startActivity(intent1);
v.performClick();
v.setPressed(false);
return false;
} else {
return false;
}
});
在下一个活动中-
对于我的第一个案例- 我的目标 ImageView 是 iImage。 但一开始,我所做的是,将(布尔)数据从之前的 Intent intent1 获取到当前 Intent I1。 然后我声明了一个包含该布尔数据值的变量(x1)。
然后我实现了一个 if 条件, 如果 x1 为真,它将改变 ImageView iImage 的图像资源。 否则,什么都不会发生。
而且,对于我的第二种情况-
我已经编好了这个数组列表。它包含作为 xName 的字符串数据和作为 xImageId 的 imageId。 无论如何, 首先,我使用 getIntent 从“eText”获取字符串数据和布尔数据。
然后执行if条件,我尝试将字符串数据与arraylist的字符串进行比较。 如果相等。 然后我告诉程序改变 ImageView 就像 case-1 一样
而且,我得到了数据
public class MainActivity2 extends AppCompatActivity {
String eName;
boolean bx;
ImageView iImage;
TextView iname;
Intent I1,intent;
ArrayList<x> xList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
iImage=findViewById(R.id.xblock);
iname=findViewById(R.id.xname);
xList=new ArrayList<>();
xList.add(new x("engineer",R.drawable.ectangle_32));
xList.add(new x("Artists", R.drawable.ectangle_31));
xList.add(new x("Singers",R.drawable.ectangle_33));
xList.add(new x("Lawyer",R.drawable.ectangle_37));
xList.add(new x("Writters",R.drawable.ectangle_38));
xList.add(new x("developer",R.drawable.ectangle_36));
I1=getIntent();
intent=getIntent();
eName = intent.getStringExtra("eText");
bx = intent.getBooleanExtra("x",false);
if (bx=true) {
String yname = eName.toLowerCase();
for (x yList : xList) {
String xname = yList.getxName().toLowerCase();
if (xname.equals(yname)) {
iname.setText(yList.getxName());
iImage.setImageResource(yList.getxImageId());
}
}
}
boolean x1= intent.getBooleanExtra("t1",false);
if (x1=true){
iImage.setImageResource(R.drawable.ectangle_31);
}
else{x1 = false;}
}
}
但是,我的应用崩溃了, 它无法到达 MainActivity2, 在MainActivity2中检查问题时,它说我的变量没有分配。
这里有什么问题?
非常感谢您的阅读,所有这些乱七八糟的文字。 如果我犯了任何错误,请告诉我。
【问题讨论】:
标签: java android arrays android-studio class