選択したアイテムの ID を、レイアウトの 1 つに含まれるフラグメントに送信する必要があることを行っています。フラグメントの基本は知っていますが、アクティビティからフラグメントに適切に通信する方法がわかりません。さて、今のところ私のコードは次のとおりです。
public class GroupActivity extends FragmentActivity {
Button information, back;
TextView group_name;
String name, group_description, group_administrator,image_id;
public static String group_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.group_screen);
Intent intent = getIntent();
name = intent.getStringExtra("group_name");
group_description = intent.getStringExtra("group_description");
group_administrator = intent.getStringExtra("group_administrator");
image_id = intent.getStringExtra("image_id");
group_id = intent.getStringExtra("group_id");
information = (Button)findViewById(R.id.btn_information);
back = (Button)findViewById(R.id.btn_back);
group_name = (TextView)findViewById(R.id.txt_group_name);
Toast.makeText(getBaseContext(),"The group id "+group_id,Toast.LENGTH_SHORT).show();
group_name.setText(name);
information.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(GroupActivity.this, GroupInformationActivity.class);
intent.putExtra("group_name",name);
intent.putExtra("group_description",group_description);
intent.putExtra("group_administrator",group_administrator);
intent.putExtra("image_id",image_id);
startActivity(intent);
GroupActivity.this.overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
}
});
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
}
private void showCreateNewTopicDialog() {
FragmentManager fm = getSupportFragmentManager();
DialogNewTopic newTopic = new DialogNewTopic();
newTopic.show(fm, "new_topic");
}
@Override
public void onBackPressed(){
super.onBackPressed();
overridePendingTransition(R.anim.in_from_right,R.anim.out_to_left);
}
}
そしてフラグメント
public class GroupConversationsFragment extends ListFragment {
final ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
String[][] conversation_header = {{"0","Topic 1","10/03/2013 10:21:am","2","0"},{"0","Topic 2","10/04/2013 1:29:pm","5","0"}};
String group_id;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setConversations();
return inflater.inflate(R.layout.conversations_list_view, container, false);
}
public void onListItemClick(ListView l, View v, int position, long id) {
Intent intent = new Intent(getActivity(), ConversationActivity.class);
startActivity(intent);
getActivity().overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right);
}
private void setConversations(){
list.clear();
SimpleAdapter adapter = new SimpleAdapter(
getActivity(),
list,
R.layout.custom_list_main_conversations,
new String[] {"message","date", "reply_count", "stars_count"},
new int[] {R.id.txt_conversation_message,R.id.txt_topic_date, R.id.txt_no_of_reply, R.id.txt_no_of_stars}
);
for(int ctr=0; ctr < conversation_header.length; ctr++){
Log.v("The header group id", conversation_header[ctr][0]);
if(conversation_header[ctr][0].equals(group_id)){
HashMap<String,String> item_list = new HashMap<String,String>();
item_list.put("message", conversation_header[ctr][1]);
item_list.put("date", conversation_header[ctr][2]);
item_list.put("reply_count", conversation_header[ctr][3]);
item_list.put("stars_count", conversation_header[ctr][4]);
list.add(item_list);
}
}
setListAdapter(adapter);
}
}
さらに説明すると、ここで行うことは、アクティビティが変数に設定する前にアクティビティから stringExtra を取得することです。カスタムリストを使用しているため、このアクティビティには Listfragment を含む独自のレイアウトがあります。次に、group_id に基づいて適切なトピックを表示するために、group_id をフラグメントに渡す必要があります。これまでに試みたのは、Activity の静的 String 変数を使用して Fragment でアクセスすることですが、ID を適切に設定しない Fragment Lifecycle に問題があると思います。どうすればこれを達成できるかについて、誰かが私にまっすぐに答えてくれることを願っています。