2013-10-03 45 views
0

我正在做一些事情,需要將選定項目的ID發送到我的一個佈局中包含的片段。我知道片段的基本內容,但我不知道如何從Activity到Fragment進行正確的通信。那麼這裏是我的代碼現在:將意圖字符串從我的FragmentActivity傳遞到我的片段

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上訪問它,但我認爲在Fragment生命週期中沒有正確設置id的問題。希望有人能夠直接回答我如何才能做到這一點。

回答

1
  • 您可以創建一個Activity,用於擴展基本活動並訪問片段中活動所需的方法或字段。
  • 你可以去廣播接收器。
  • 您可以通過意向爲發送從Activity數據:

    Bundle bundle = new Bundle(); 
    bundle.putString("key","value - from the activity"); 
    
    GroupConversationsFragment fragmentObject = new GroupConversationsFragment(); 
    fragmentObject.setArguments(bundle); 
    
        -> in GroupConversationsFragment onCreateView(): 
    
    @Override 
        public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    
          String val = getArguments.getString("key"); 
    
          return inflater.inflate(R.layout.fragment, container, false); 
         } 
    
+0

嗨@Niveditha,我嘗試了包添加字符串的,但我得到的字符串的一部分空指針異常val = getArguments()。getString(「key」); – KaHeL

+0

嘗試這樣做; Bundle bundle = new Bundle(); GroupConversationsFragment fragmentObject = new GroupConversationsFragment(); bundle.putString(「key」,「value - from the activity」); fragmentObject.setArguments(bundle);看看你如何更換片段 – Niveditha

相關問題