ユーザーが listFragment の項目をクリックしたときにプロファイル アクティビティを開始したいと考えています。リストには、名前、ID、ランキングなど、ユーザーに関するさまざまな情報が表示されます...
私が探しているのは、クリックされたアイテムに関する情報にアクセスし、リストで選択されたユーザーの ID をインテントに渡す方法です。
AsyncTask はサーバーから情報を取得し、アダプターを呼び出して、リスト項目にユーザーの詳細を表示します。onListItemClick で使用する場合:
Object o=(Object)getListView().getItemAtPosition(position);
Log.e("LikeAttend Report", "Clicked list item: " + position + " Content: " + o.toString());
ログは次を返します。
クリックされたリスト項目: 1 コンテンツ: {score=7540, id=4, name= Gepp}
メソッド内で id 値を取得してインテントにエクストラを追加し、プロファイル アクティビティを開始するにはどうすればよいですか?
リファレンスhttp://developer.android.com/reference/java/lang/Object.htmlに役立つものは何も見つかりませんでした
コード:
これは私がこれまでに試したことです:
public static class LikeFragmentList extends ListFragment
{
private ListView listLike;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View likeView = inflater.inflate(R.layout.likelist, container, false);
ProgressBar progress = (ProgressBar) likeView.findViewById(R.id.loading_spinner_like);
String tabSocial="like";
listLike = (ListView) likeView.findViewById(android.R.id.list);
/*
* The asyncTask retrieves infos about the user list
*/
new AsyncLoadSocial(getActivity(), progress, listLike).execute(uid,tabSocial);
return likeView;
}
@Override
public void onListItemClick(ListView listView, View view, int position, long id)
{
super.onListItemClick (listView, view, position, id);
// I've tried with object and cursor
Object o = (Object) getListView().getItem(position);
//Cursor cursor = (Cursor) getListAdapter().getItem(position); NullPointerException
Log.e("LikeAttend Report", "Clicked list item: " + position + " Content: " +o.toString());
Intent intent = new Intent(getActivity(), Profile.class);
//intent.putExtra("id", o.toString(0)); NullPointerException
getActivity().startActivity(intent);
}
}
エマニュエルから提案された最初のソリューション。
ListFragmentList で:
@Override
public void onListItemClick(ListView listView, View view, int position, long id)
{
super.onListItemClick (listView, view, position, id);
String infos = getListView().getItemAtPosition(position).toString();
String[] info = infos.split("=");
Log.e("LikeAttend Report", "Clicked list item: " + position + " Content: total -> " + infos + " \n Info[2] is:" + info[2]);
Intent intent = new Intent(getActivity(), Profile.class);
//intent.putExtra("id", o.toString(0));
getActivity().startActivity(intent);
}
ログは次を返します。
クリックされたリスト項目: 2 内容: 合計 -> {スコア=0, id=12, 写真=, 名前=Beatrice Fratocchi} 情報[2] は: 12, 写真
必要な情報は 12 です。
* 提案された 2 番目のソリューション *
@SuppressWarnings("unchecked")
@Override
public void onListItemClick(ListView listView, View view, int position, long id)
{
super.onListItemClick (listView, view, position, id);
HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);
Log.e("LikeAttend Report", "Clicked list item: " + position +" Content: \n" + map.get(TAG_ID).toString());
Intent intent = new Intent(getActivity(), Profile.class);
intent.putExtra("id", map.get(TAG_ID));
getActivity().startActivity(intent);
}