listviewが多い場合 OnItemClickで飛ばすintentの設定方法
- 評価
- クリップ 1
- VIEW 2,280
プロフィールリストをlistviewで作成して、
各メンバーのプロフィールをタップすると、別のintentに飛ばし、プロフィールの詳細を表示させたいです。
メンバーの配列は10個くらいで、飛ぶ先のアクティヴィティのレイアウトは下記のような感じにしたいです。
タップしたitem(OnItemClick使って)によって
「名前、役職、下記のテキスト 画像など」
を変えたいです。
仮にメンバー(LIstview)が100人いた場合、
「intentを100個用意する」んじゃなく、もっと簡単でスッキリさせる方法ありますか?
追記部分
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent sub = new Intent();
sub.setClassName("com.example.tsuyoshiokaprofile", "com.example.tsuyoshiokaprofile.SubActivity");
startActivity(sub);
long get_id = id;
switch(get_id){
case 0:
text.setText(R.string.profil_name_yoshioka);
text2.setText(R.string.job_yoshioka);
text3.setText(R.string.description_yoshioka);
break;
}
}
});
switchでメンバー分の分岐を用意しようかと思うのですが、考え方はあってますでしょうか?
switchの引数部分にlongを入れられない、とエラーが出ています。
onitemclickでタップされた項目の「id」と「switchを対応させる方法」が今ひとつわからないです。
追記3
遷移前
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent sub = new Intent();
sub.setClassName("com.example.tsuyoshiokaprofile", "com.example.tsuyoshiokaprofile.SubActivity");
startActivity(sub);
sub.putExtra("list_names", listView.getItemAtPosition(position).toString());
}
});
public class SubActivity extends AppCompatActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sub_activity);
TextView text = (TextView) findViewById(R.id.textView);
/*
TextView text2 = (TextView) findViewById(R.id.textView2);
TextView text3 = (TextView) findViewById(R.id.textView3);
ImageView image = (ImageView) findViewById(R.id.imageView);
*/
Intent sub = getIntent();
String name = sub.getStringExtra("list_names");
text.setText(name);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
Intentに遷移先を一意に表すデータ(今回なら名前とか?)をセットし、遷移先のActivityでセットされているデータをもとに表示を変えたらいいと思いますよ。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
んー、多分、メンバークラスを作って、それをListviewにした内容をSubActivityに渡したほうがすっきりする感じがしますね…
List<MemberData>listItems = new ArrayList<MemberData>();
item = new MemberData("田中", "一般社員", "開発部で働いてます", R.drawable.tanaka);
listItems.add(item);
item = new MemberData("鈴木", "一般社員", "制作部で働いてます", R.drawable.suzuki);
listItems.add(item);
みたいな感じでListViewに渡すリストを作っておいて
MemberListAdapter memberListAdapater = new MemberListAdapter(this, 0, listItems);
listView.setAdapter(memberListAdapater);
とListViewにデータをセットしてあげて
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// クリックされたアイテムを取得
MemberData item = (MemberData) listView.getItemAtPosition(position);
//プロフィール詳細画面表示用の受け渡しデータ作成
Bundle bundle = new Bundle();
bundle.putString("name", item.getName());
bundle.putString("title", item.getTitle());
bundle.putString("text", item.getText());
bundle.putInt("image_id", item.getImageId());
Intent intent = new Intent(this, SubActivity.class);
intent.putExtras(bundle);
//プロフィール詳細画面へ遷移
startActivity(intent);
}
});
みたいにデータを受け渡すような感じ?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.96%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/03/28 17:57
こういう感じでしょうか?
2016/03/28 18:12
ここでやるべきことはどの行が押されたかを特定し、次のActivityに教えることです。そのため、ここにはTextViewを変更する処理は不要です。
AdapterView#getItemAtPositionにpositionを与えるとクリックした行にセットされている文字列が取得できます。
この取得した文字列を遷移先に渡してください。
確認ですが、最終的にActivityは何個になる予定ですか?
2016/03/28 18:47
この取得した文字列を遷移先に渡してください。
ご回答ありがとうございます。
変遷前のアクティビティです。
やってみます。
>>確認ですが、最終的にActivityは何個になる予定ですか?
アクティビティは、変遷前と変遷後の2個をとりあえず考えています。
分岐(メンバーによって表示を変える内容)は10数個くらいです。
2016/03/28 18:53
2016/03/28 19:12
調べてみます。
2016/03/28 19:17
2016/03/28 19:27
こんな感じでしょうか?
2016/03/29 10:47
遷移後は名前をもとに表示する内容を特定し、表示すればいいですよ。
このように最低限のデータを渡すことで遷移先に表示する内容が変わった時に遷移前のActivityを変更する必要がなくなります。
2016/03/29 12:34
遷移後のintentに渡し、タップした項目によって表示する名前を変えることができました!
他のテキスト、画像部分も変えていきたいと思います。