通过Intent从一个类传递数据到另一个类并且无法捕获它?

时间:2010-07-29 08:41:05

标签: android android-intent

我有两个这样的String Arrays,

String[] htmlArray = {
      "file:///android_asset/Pinocchio/OPS/chapter-001.xml",
      "file:///android_asset/Pinocchio/OPS/chapter-002.xml",

      "file:///android_asset/Pinocchio/OPS/chapter-035.xml",
      "file:///android_asset/Pinocchio/OPS/chapter-035.xml" 
};

String[] htmlArray1 = {
      "file:///android_asset/Harry_Potter/OEBPS/part1.xhtml",
      "file:///android_asset/Harry_Potter/OEBPS/part2_split_000.xhtml",

      "file:///android_asset/Harry_Potter/OEBPS/part18_split_000.xhtml",
      "file:///android_asset/Harry_Potter/OEBPS/part18_split_001.xhtml", 
};

然后,我将两个ImageView放在另一个类中,

private void init() {
    pino_cover = (ImageView) findViewById(R.id.pino_cover);
    pino_cover.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        Intent reader=new Intent(instance,ReaderScreen.class);
        reader.putExtra("pino",true);
        startActivity(reader);
      }
    });

    harry_cover=(ImageView) findViewById(R.id.harry_cover);
    harry_cover.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        Intent reader=new Intent(instance,ReaderScreen.class);
        reader.putExtra("harry",true);
        startActivity(reader);
      }
    });
  }

然后,如果我点击Pino图像,我可以通过htmlArray获取数据。

Intent i=getIntent();
      Bundle b = i.getExtras();
       String newText = b.
       String setext=b.getString("harry");
      if (newText=="pino")    
        pages = htmlArray;    
      else
        pages = htmlArray1;

但如果我点击Harry图像,那么它也会通过htmlArray获取数据。我想得到htmlArray1。 我怎么能得到?

2 个答案:

答案 0 :(得分:5)

你只为你的意图添加一个布尔值,但你可以使用.putExtra(mStringArray, htmlArray1);,因为这个方法存在通过意图传递数组......? 另外,为了比较java中的两个字符串,你不能==而是.equals("")。在您的情况下if(newText.equals("harry)) ...

修改 好的,在一个更简单的版本中,你有:

Intent i=getIntent();
  Bundle b = i.getExtras();
   String newText = b.
   String setext=b.getString("harry");
  if (newText=="pino")    
    pages = htmlArray;    
  else
    pages = htmlArray1;

替换它:

Intent i=getIntent();
  Bundle b = i.getExtras();
   String newText = b.
   String setext=b.getString("harry");
  if (newText.equals("pino"))    
    pages = htmlArray;    
  else
    pages = htmlArray1;

这应该在逻辑上有用。

答案 1 :(得分:2)

我认为错误在于您使用“==”来比较上面提到的2个字符串。 请使用str1.equals(str2)而不是str1 == str2。

Sephy的回答建议你将2个html数组传递给被调用的活动。如果由于某些原因,被调用的活动仍然可以访问2个阵列,那么你可以像你一样做。

此外,在你传递的地图中,如果你使用2个不同的键(一个是“哈利”,一个是“pino”),它似乎打败了目的。我建议像:

关于哈里事件: i.putExtra(“data”,harry_html_array)

关于pino事件: i.putExtra(“data”,pino_html_array)

在被叫活动中: array = extras.getStringArray(“data”);