2016-03-21 25 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