【问题标题】:Android Studio, setting text visibility based on int value from another activityAndroid Studio,根据另一个活动的 int 值设置文本可见性
【发布时间】:2015-12-12 07:20:44
【问题描述】:

我正在尝试根据另一个活动的整数值在一个活动中设置 TextView 可见性。理想情况下,我试图将 imgID 的值设置为 int,并且根据整数值,第二个活动设置 10 个 TextView 的可见性。每当在主活动(图片)中单击 ImageView 时,应该将 imgID 值设置为一个数字。但是,当我运行程序时,无论我单击哪张图片,都会出现所有文本。这是我在课堂上的第二个实验室,我有点挣扎,所以如果我错过了一些明显的东西,我深表歉意。此外,感谢我错过的任何其他提示或信息。提前感谢您的帮助!

代码如下:

主要活动:

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);

    }




}

第二个活动:

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);
    }
}

【问题讨论】:

  • 检查我的答案@Matt 我在你的代码中发现了一个“失败”(我猜):P

标签: android android-activity android-studio android-imageview visibility


【解决方案1】:

在 android 中,通常您应该将 imgID 之类的参数传递给一个意图,然后从新的 startet 活动中获取这些值。

这里是一个简短的代码示例:

  Intent intent = new Intent(Pictures.this, Lab2App2.class);
       intent.putExtra("imgID", imgID);

        //startActivityForResult(intent, YOUR_RETURN_CODE);
        startActivity(intent); 

如果您使用 startActivitiyForResult() 调用活动,则需要 RETURN_CODE,以便您知道哪个活动返回了您的结果。

在 Lab2App2 Activity 中,您可以使用以下方法获取 int:

getIntent().getIntExtra("imgID",DEFAULT_VALUE);

直接访问静态变量不是一个好习惯。有很多不同的方法可以做到这一点。 但这是最安全和最简单的解决方案......例如恢复实例状态等。始终建议使用 Intent。

我希望这会有所帮助。 干杯

【讨论】:

  • 你必须编辑它是Lab2App2.class而不是Lab2App2,你可以像startActivity(intent);一样开始活动:)
  • 编辑了我的答案(粗心的错误我很抱歉:))
  • @Matt 也请发布您的资源文件,如果这不起作用
【解决方案2】:

你最好使用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

【讨论】:

  • 嗯... @Skizo 看起来好像可以工作,尽管我确实必须将默认值“0”添加到 int _imgId = getIntent().getIntExtra("imgID"); 但是,我仍然遇到同样的问题和以前一样,所有文本都出现了。还有其他建议吗?
  • 你能确保 int 将 grom 第一个活动传递给第二个活动是否顺利通过,我的意思是敬酒什么的,让我知道
  • 嘿,谢谢!我有一个同学帮我弄清楚最后一点,但你让我走上了正轨。原来我在应用你给我的代码后忘记删除startActivity(new Intent(Pictures.this, Lab2App2.class));。另外,您对校园的看法是正确的,我错误地标记了第二部分。非常感谢您的帮助!
  • 太棒了!如果我的回答对您有所帮助,请随时将其标记为正确,并且如果您的代码有更多问题,请不要怀疑向我提问,这对您有帮助:)
猜你喜欢
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多