2016-03-21 37 views
0

我的程序显示一个水平滑动的按钮行,其中包含艺术品的文字说明。单击按钮时,ImageActivity启动以显示相应的艺术作品。当我点击任何文本按钮时,它总是显示数组中最后一幅作品。没有通过PutExtra的正确整数

我想通过一个int ID到第二个活动,以便它会显示正确的绘画,一旦它的相应的描述被点击。

谢谢!

这里是我的MainActivity:

import android.content.Intent; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 

public class MainActivity extends Activity { 

    //CONTAINING PAINTINGS 
    private LinearLayout mLinearList; 
    private String id; 
    private Painting painting; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my); 

     //REFERENCE THE SCROLLABLE LAYOUT STRUCTURE IN MAIN_SCREEN.XML 
     mLinearList = (LinearLayout) findViewById(R.id.linearList); 

     //FILL THE SCROLLABLE LAYOUT STRUCTURE WITH PAINTINGS 
     fillTextCarousel(); 

    } 

    private void fillTextCarousel() { 

     // POPULATE THE LINEAR LIST CAROUSEL WITH PAINTINGS AND DESCRIPTIONS 
     Button buttonItem; 

     for (int i = 0; i < RenaissanceDatabase.description.length; i++) { 
      //STORE THE INDIVIDUAL PAINTINGS AS BUTTONS 
      buttonItem = new Button(this); 


      painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]); 

      //USE THE CONTENT DESCRIPTION PROPERTY TO STORE 
      //PAINTING DATA 

      buttonItem.setContentDescription(painting.getDescription()); 
      buttonItem.setText(painting.getDescription()); 

      //SET AN ONCLICK LISTENER FOR THE TEXT BUTTON 
      buttonItem.setOnClickListener(displayPainting); 

      //ADD THE IMAGE BUTTON TO THE SCROLLABLE LINEAR LIST 
      mLinearList.addView(buttonItem); 
     } 
    } 

    private View.OnClickListener displayPainting = new View.OnClickListener() { 
     public void onClick(View btn) { 
     // COLLECT THE IMAGE STORED FOR THE PAINTING 
      //String Painting_ID = Integer.toString(painting.getId()); 
      Intent imgIntent = new Intent(getApplicationContext(), ImageActivity.class); 
      imgIntent.setAction(imgIntent.ACTION_SEND); 
      imgIntent.putExtra("image_id", painting.getId()); 
      startActivity(imgIntent); 

     } 
    }; 

我ImageActivity,我想传递一个整数ID到:

public class ImageActivity extends Activity { 

private Painting painting; 
private int index; 
private int[] IDs; 
private String[] Desc; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 

    Intent objIntent = getIntent(); 
    int ID_Val = objIntent.getIntExtra("image_id", 0); 
    ImageView art = (ImageView) findViewById(R.id.imageView2); 
    art.setImageResource(ID_Val); 
} 

}

与涂装数据库,我要带哪些取自以下ID:

public class RenaissanceDatabase { 

    public static String description[] = { 
      "Venus of Urbino\nTitan, 1538", 
      "St. John the Baptist\nLeonardo da Vinci, 1516", 
      "Protrait of Baldassare Castiglione\nRaphael, 1515", 
      "The Entombent of Christ\nCaravaggio, 1603", 
      "Coronation of the Virgin\nFra Angelico, 1435", 
      "Mars and Venus\n Sandro Bottcelli, 1483"}; 

    public static int id[] = { 
      R.drawable.painting1, // VENUS OF URBINO 
      R.drawable.painting2, // ST.JOHN BAPTIST 
      R.drawable.painting3, // BALDASSARE 
      R.drawable.painting4, // ENTOMBENT OF CHRIST 
      R.drawable.painting5, // CORONOATION 
      R.drawable.painting6 // MARS AND VENUS 
    }; 
} 
+0

你会得到一个你问的问题的答案,但你应该真的使用ViewPager,使你的意见得到回收 – CQM

回答

1

设置id为每button在for循环 -

for (int i = 0; i < RenaissanceDatabase.description.length; i++) { 
      //STORE THE INDIVIDUAL PAINTINGS AS BUTTONS 
      buttonItem = new Button(this); 


      painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]); 

      //USE THE CONTENT DESCRIPTION PROPERTY TO STORE 
      //PAINTING DATA 

      buttonItem.setId(painting.getId()); 
.... 
     } 
    } 

,然后改变你的OnClickListener -

private View.OnClickListener displayPainting = new View.OnClickListener() { 
     public void onClick(View btn) { 
    .... 
      imgIntent.putExtra("image_id", btn.getId()); 
      startActivity(imgIntent); 

     } 
    }; 
+0

现在是如此明显 - 非常感谢你!像Nathaniel D. Wagoner说的,我没有更新当前的绘画。 – Freckles

+0

无论谁低估 - 你能给出理由吗? –

1

您的代码设置了这个非常有意义的方式。

看看你用来配置一切的循环。

for (int i = 0; i < RenaissanceDatabase.description.length; i++) { 
..... 
    painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]); 
... 
} 

这个循环结束时绘画的价值是什么?这是无论在阵列中的最后一个位置。

现在看看你的代码,通过ID:

private View.OnClickListener displayPainting = new View.OnClickListener() { 
    public void onClick(View btn) { 
     .... 
     imgIntent.putExtra("image_id", painting.getId()); 
     ..... 
    } 
}; 

的代码提交永远不会更新“当前画”到被感动的人。您需要确定用户触摸了哪一幅画,并使用该画的ID。

另一个答案有建议将buttonId设置为绘画的ID - 这有一些问题,所以我不会亲自推荐。

相反,我会使用Adapter和ViewHolder模式,并利用视图持有者来包含此元数据。这是一个更具可扩展性的解决方案。

+1

Arrgh!非常感谢!过去几个小时我一直在盯着这个问题,并没有意识到我实际上并没有根据点击的按钮更新ID。感谢您抽出宝贵的时间来帮助我:/ – Freckles