Android Studio,根据另一个 activity 的 int 值设置文本可见性
Android Studio, setting text visibility based on int value from another activity
我正在尝试根据另一个 activity 的整数值在一个 activity 中设置 TextView 可见性。理想情况下,我试图将 imgID 的值设置为一个 int,并且根据整数值,第二个 activity 设置 10 个 TextView 的可见性。只要在主 activity(图片)中单击 ImageView,imgID 值就应该设置为一个数字。但是,当我 运行 程序时,无论我单击哪张图片,所有文本都会出现。这是我在 class 中的第二个实验室,我有点挣扎,如果我错过了一些明显的事情,我深表歉意。此外,感谢任何其他提示或关于我错过的其他事情的信息。感谢您提前帮助!
代码如下:
主要Activity:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class Pictures extends AppCompatActivity {
static int imgID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pictures);
//register click event listener to image view(I hope :)
ImageView imgB = (ImageView) findViewById(R.id.imageViewB);
ImageView imgH = (ImageView) findViewById(R.id.imageViewH);
ImageView imgM = (ImageView) findViewById(R.id.imageViewM);
ImageView imgD = (ImageView) findViewById(R.id.imageViewD);
ImageView imgS = (ImageView) findViewById(R.id.imageViewS);
imgB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//if imgB clicked, set imgID to 1 and so on...
imgID = 1;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgD.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 2;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgH.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 3;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgM.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 4;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgS.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 5;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_pictures, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
第二个Activity:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class Lab2App2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lab2_app2);
TextView campusB = (TextView)findViewById(R.id.text_campusB);
TextView campusD = (TextView)findViewById(R.id.text_campusD);
TextView campusH = (TextView)findViewById(R.id.text_campusH);
TextView campusM = (TextView)findViewById(R.id.text_campusM);
TextView campusS = (TextView)findViewById(R.id.text_campusH);
if(Pictures.imgID == 1) {
campusB.setVisibility(View.VISIBLE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 2) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.VISIBLE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 3) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.VISIBLE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 4) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.VISIBLE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 5) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.VISIBLE);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_lab2_app2, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
在 android 中,通常您应该将 imgID 等参数传递给意图,然后从新的 startet activity.
获取这些值
这是一个简短的代码示例:
Intent intent = new Intent(Pictures.this, Lab2App2.class);
intent.putExtra("imgID", imgID);
//startActivityForResult(intent, YOUR_RETURN_CODE);
startActivity(intent);
如果您使用 startActivitiyForResult()
调用活动,则需要 RETURN_CODE,这样您就知道哪个 activity 返回了您的结果。
在 Lab2App2 Activity 中,您可以使用以下方法获取整数:
getIntent().getIntExtra("imgID",DEFAULT_VALUE);
直接访问静态变量不是一个好习惯。有很多不同的方法可以做到这一点。
但这是最安全和最简单的解决方案......例如用于恢复实例状态等。始终建议使用意图。
希望对您有所帮助。
干杯
你最好使用 Intent
,你可以用 putExtras
创建一个 Intent
,如下所示:
Intent intent = new Intent(Pictures.this, Lab2App2.class);
intent.putExtra("imgID", imgID);
startActivity(intent);
然后在你的 onCreate()
在你的 Lab2App2
你添加这个:
int _imgId = getIntent().getIntExtra("imgID");
现在您可以像以前一样进行比较了
if(_imgId == 1) {
....
}
记得从您的第一个 Activity
(static int imgID;
)
中删除 static
顺便说一下...我不知道这是不是复制粘贴错误,或者您想要这种方式,但您的代码中有这个:
TextView campusS = (TextView)findViewById(R.id.text_campusH);
应该是campusS
,不应该是? :D
我正在尝试根据另一个 activity 的整数值在一个 activity 中设置 TextView 可见性。理想情况下,我试图将 imgID 的值设置为一个 int,并且根据整数值,第二个 activity 设置 10 个 TextView 的可见性。只要在主 activity(图片)中单击 ImageView,imgID 值就应该设置为一个数字。但是,当我 运行 程序时,无论我单击哪张图片,所有文本都会出现。这是我在 class 中的第二个实验室,我有点挣扎,如果我错过了一些明显的事情,我深表歉意。此外,感谢任何其他提示或关于我错过的其他事情的信息。感谢您提前帮助!
代码如下:
主要Activity:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
public class Pictures extends AppCompatActivity {
static int imgID;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pictures);
//register click event listener to image view(I hope :)
ImageView imgB = (ImageView) findViewById(R.id.imageViewB);
ImageView imgH = (ImageView) findViewById(R.id.imageViewH);
ImageView imgM = (ImageView) findViewById(R.id.imageViewM);
ImageView imgD = (ImageView) findViewById(R.id.imageViewD);
ImageView imgS = (ImageView) findViewById(R.id.imageViewS);
imgB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//if imgB clicked, set imgID to 1 and so on...
imgID = 1;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgD.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 2;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgH.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 3;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgM.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 4;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
imgS.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imgID = 5;
startActivity(new Intent(Pictures.this, Lab2App2.class));
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_pictures, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
第二个Activity:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class Lab2App2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lab2_app2);
TextView campusB = (TextView)findViewById(R.id.text_campusB);
TextView campusD = (TextView)findViewById(R.id.text_campusD);
TextView campusH = (TextView)findViewById(R.id.text_campusH);
TextView campusM = (TextView)findViewById(R.id.text_campusM);
TextView campusS = (TextView)findViewById(R.id.text_campusH);
if(Pictures.imgID == 1) {
campusB.setVisibility(View.VISIBLE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 2) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.VISIBLE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 3) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.VISIBLE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 4) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.VISIBLE);
campusS.setVisibility(View.GONE);
}
else if(Pictures.imgID == 5) {
campusB.setVisibility(View.GONE);
campusD.setVisibility(View.GONE);
campusH.setVisibility(View.GONE);
campusM.setVisibility(View.GONE);
campusS.setVisibility(View.VISIBLE);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_lab2_app2, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
在 android 中,通常您应该将 imgID 等参数传递给意图,然后从新的 startet activity.
获取这些值这是一个简短的代码示例:
Intent intent = new Intent(Pictures.this, Lab2App2.class);
intent.putExtra("imgID", imgID);
//startActivityForResult(intent, YOUR_RETURN_CODE);
startActivity(intent);
如果您使用 startActivitiyForResult()
调用活动,则需要 RETURN_CODE,这样您就知道哪个 activity 返回了您的结果。
在 Lab2App2 Activity 中,您可以使用以下方法获取整数:
getIntent().getIntExtra("imgID",DEFAULT_VALUE);
直接访问静态变量不是一个好习惯。有很多不同的方法可以做到这一点。 但这是最安全和最简单的解决方案......例如用于恢复实例状态等。始终建议使用意图。
希望对您有所帮助。 干杯
你最好使用 Intent
,你可以用 putExtras
创建一个 Intent
,如下所示:
Intent intent = new Intent(Pictures.this, Lab2App2.class);
intent.putExtra("imgID", imgID);
startActivity(intent);
然后在你的 onCreate()
在你的 Lab2App2
你添加这个:
int _imgId = getIntent().getIntExtra("imgID");
现在您可以像以前一样进行比较了
if(_imgId == 1) {
....
}
记得从您的第一个 Activity
(static int imgID;
)
static
顺便说一下...我不知道这是不是复制粘贴错误,或者您想要这种方式,但您的代码中有这个:
TextView campusS = (TextView)findViewById(R.id.text_campusH);
应该是campusS
,不应该是? :D