2012-04-05 9 views
2

私は探しているものがわからないためかもしれませんが、私が推測するものを見つける方法がわかりませんアンドロイドで非常に簡単にする必要があります。アイテム固有のデータを使用してアクティビティを切り替える方法

私は画面に表示するデータの配列を持っています。このデータは、データベースのキー、名前、イメージを保持するクラスです。

私は現在、このデータをImageViewとTextViewとして表示しています。私は配列をループし、画像とテキストを含むTableLayoutに新しい行を追加します。

画像とテキストの両方をクリック可能にして、新しいアクティビティに変更したいと思います。

この新しいアクティビティは、正しいデータを表示するためにクリックされた行のデータベースキーを知る必要があります。ここで

は、私がこれまで持っているものです。

private void fillSuggestionTable(TableLayout tabSuggestions, Suggestion[] arrToAdd) 
{ 
    for(int i = 0; i < arrToAdd.length; i++) 
    { 
     /* Create a new row to be added. */ 
     TableRow trSuggestion = new TableRow(this); 
     trSuggestion.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 

     /* Create objects for the row-content. */ 
     ImageView imgDisplayPicture = new ImageView(this); 
     ImageHandler.loadBitmap(arrToAdd[i].strImageURL, imgDisplayPicture); 
     imgDisplayPicture.setLayoutParams(new LayoutParams(50,50)); 

     TextView txtArtistName = new TextView(this); 
     txtArtistName.setText(arrToAdd[i].strName); 
     txtArtistName.setTextColor(Color.parseColor("#000000")); 

     /* Add data to row. */ 
     trSuggestion.addView(imgDisplayPicture); 
     trSuggestion.addView(txtArtistName); 

     /* Add row to TableLayout. */ 
     tabSuggestions.addView(trSuggestion, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
    } 
} 

答えて

1

TableViewを使用する理由はありますか? ListView &カスタムCursorAdapterを使用すると、データベースからListView行への変換をアダプタが処理できるので、達成したいと思うように思えます。その時点で、データベースのIDを知っている新しい活動を開始することは簡単です:

mListView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick (AdapterView<?> parent, View view, int position, long id) { 
    Intent i = new Intent(MyActivity.this, MyOtherActivity.class); 
    i.putExtra("database_id", id); 
    startActivity(i); 
    } 
}); 

そしてMyOtherActivity中:

private int dbId; 
protected void onCreate(Bundle savedInstanceState) { 
    //do stuff 
    dbId = getIntent().getIntExtra("database_id", -1); // the -1 is the default if the extra can't be found 
} 
+0

いいえ、私がTableviewを使用している唯一の理由は、当時の私にとって最も理にかなったものでした。 私はidがそのリストのitmeのidだろうと推測していますか?だから、リストアイテムのIDをデータベースのキーに設定している限り、ListViewを塗りつぶすと、簡単にIDを取得できますか? –

+0

これよりも簡単です。以下で説明するようにCursorAdapterを拡張するだけです。データベースからカーソルを渡すと、listViewのすべてのビューのIDプロパティが設定されます。 http://droiddevelop.tumblr.com/post/12322798864/part-136-making-a-custom-cursor-adapter – JRaymond

1

別のアクティビティに余分なデータを渡すには、Intent.putExtra(名前、値)メソッドで追加の情報を追加する必要があります。アウト再びデータを取得するには

Intent i = new Intent([pass info about next Activity here]); 
i.putExtra("databaseKey", databaseKey); 
startActivity(i); 

public void onCreate(Bundle savedInstance) 
{ 
    // Do all initial setup here 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null && extras.containsKey("databaseKey")) 
    { 
     int databaseKey = extras.getInt("databaseKey"); 
     // Load database info 
    } 
    else 
    { 
     // No data was passed, do something else 
    } 
} 

EDIT:テーブルの行をクリックしたときに、あなたがする必要がありますを調べるには意図を送信するために例えば

、 View.OnClickListenerを実装し、使用するTableRowsのonClickListenerを設定します。例えば

:あなたが持っているでしょう

/* Create a new row to be added. */ 
TableRow trSuggestion = new TableRow(this); 
trSuggestion.setOnClickListener([listener]); 

唯一の問題は、関連するデータベース行IDに閲覧者のIDを関連されます。 HashMapが役立ちます。

+0

私はデータを渡すために、この方法を見てきました。私が最も問題に抱えている問題は、どのアイテムがクリックされたかを知り、そのアイテムに固有のデータを取得することです。 –

+0

私は、リスナーなどの情報で私の答えを更新しました。 – Raceimaztion

0

これは非常に簡単な手順です。 This blogはそれを簡単に説明しています。

+0

私はデータを渡すこの方法を見てきました。私が最も問題に抱えている問題は、どのアイテムがクリックされたかを知り、そのアイテムに固有のデータを取得することです。 –

+0

'view.setTag(Object)'を使ってビューにデータを添付し、 'view.getTag()'を使ってデータを取り出すことができます。 –

関連する問題