2016-09-28 49 views
0

こんにちは、私はAndroidの世界で始まっています。問題が示唆するように、私はそこに停泊しています。私はいくつかの研究を行い、このコミュニティに投稿された回答のいくつかを試しましたが、私はそれを理解することはできません。アクティビティからデータを送信して断片化する方法

私は連絡先のリストを表示するアクティビティを持っています。リスト内のすべてのアイテムが詳細ビューにナビゲートされ、一度タップされます。私の目標は、リクエストを実行してレスポンスを表示するためにアイテムIDに渡されます。事前みんな

答えて

2

は、このようなあなたの項目のためのセットアップリスナーに試してみてください。フラグメント作成には静的メソッドを使用することをお勧めします。ただ、追加する

public static PersonDetailFragment newInstance(String personId) { 
    Bundle args = new Bundle(); 
    args.putString("personId", personId); 
    PersonDetailFragment fragment = new PersonDetailFragment(); 
    fragment.setArguments(args); 
    return fragment; 
} 
+0

、 'your_fragment_container'ではなく、レイアウトに' '自体を追加するので、' layout.persons' XMLに追加する必要があります。適切なフラグメントのクラスでこのメソッドを書きます。詳細情報[こちら](https://developer.android.com/training/basics/fragments/fragment-ui.html#AddAtRuntime) –

+0

ありがとう、それは魅力的なように働いた=) –

0

public class PersonDetailActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Intent intent = getIntent(); 

     // This variables have the right value 
     String personName = intent.getStringExtra("personName"); 
     String personID = intent.getStringExtra("personID"); 

     Bundle bundle = new Bundle(); 
     // I'm trying to send this variable to make a request later 
     bundle.putString("personID", personID); 
     // Set Fragment Arguments 
     PersonDetailFragment fragment = new PersonDetailFragment(); 
     fragment.setArguments(bundle); 

     setContentView(R.layout.persons); 
    } 
} 

public class PersonDetailFragment extends Fragment { 


    public PersonDetailFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // This throw me a NPE 
     String data = null; 
     if (getArguments() != null) { 
      data = getArguments().getString("personID"); 
     } 
     final View rootView = inflater.inflate(R.layout.person_detail_list, container, false); 
     return rootView; 
    } 

} 

おかげであなたはFragmentインスタンスを作成した後に任意の変数を渡す必要がない場合は、このようなコンストラクタでパラメータを渡す:

は、ここに私の試みです。

このような断片のコンストラクタビーイング
PersonDetailFragment fragment = new PersonDetailFragment(personID); 

public PersonDetailFragment(String personID) { 
     // Required empty public constructor 
    } 

アクティビティと常に通信したい場合は、インターフェイスを実装することができます。この記事を読む、それを始めるのは良い点です、listeners

https://developer.android.com/training/basics/fragments/communicating.html

0

あなたの活動にごフラグメントを追加していないようですか?

フラグメントがアクティビティのレイアウトxmlに含まれている場合、そのフラグメントは、Javaで引数を作成して追加するものと同じではありません。

フラグメントをアクティビティにプログラムで追加する必要があります。

public void onItemClick(ItemView itemView) { 
    personId = itemView.getPersonId(); 
    Fragment detailFragment = PersonDetailFragment.newInstance(personId); 
    getSupportFragmentManager() 
       .beginTransaction() 
       .replace(your_fragment_container, detailFragment) 
       .commit(); 
} 

次のステップは、フラグメントの初期化です:

関連する問題