0

だから私は4つのボタンの束を作り、それぞれにインテントを入れました。それらはすべて同じ Fragment クラスに移動します。ただし、それらのエクストラは異なるため、button1 がクリックされた場合、Fragment が開いて特定のアクションを実行し、button2 がクリックされた場合、Fragment が別のアクションを実行するなどです。通常のアクティビティでコードを試してみたところ、機能しましたが、断片的には機能しませんでした。「IDがnullです」と返されるだけです

インテントを送信するクラス

public class Intennt extends ActionBarActivity {

Button bt1,bt2,bt3,bt4;
Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_intennt);
    bt1 = (Button) findViewById(R.id.button);
    bt2 = (Button) findViewById(R.id.button2);
    bt3 = (Button) findViewById(R.id.button3);
    bt4 = (Button) findViewById(R.id.button4);


    bt1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, ItemListActivity.class);

i.putExtra(ItemDetailFragment.ID_ACTION,ItemDetailFragment.ACTION_1);
            startActivity(i);
        }
    });

    bt2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, ItemListActivity.class);  
            i.putExtra(ItemDetailFragment.ID_ACTION, 
  ItemDetailFragment.ACTION_2);
            startActivity(i);
        }
    });
}

インテントとエクストラを受け取るフラグメント

public class ItemDetailFragment extends Fragment {
public static final int ACTION_1 = 1;
public static final int ACTION_2 = 2;
public static final int ACTION_3 = 3;
public static final int ACTION_4 = 4;
public static final int ACTION_NULL = -1;
public static final String ID_ACTION = "action_id";


public static final String ARG_ITEM_ID = "item_id";


private DummyContent.DummyItem mItem;

public ItemDetailFragment() {
}

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


    if (getArguments().containsKey(ARG_ITEM_ID)) {
        // Load the dummy content specified by the fragment
        // arguments. In a real-world scenario, use a Loader
        // to load content from a content provider.
        mItem = 
DummyContent.ITEM_MAP.get(getArguments().getString(ARG_ITEM_ID));
    }


    int id = getActivity().getIntent().getIntExtra(ID_ACTION, -1);

    if (id == ACTION_NULL) {
        Log.d("TAG", "id is null");
        Toast.makeText(getActivity(), "id is null!", 
Toast.LENGTH_SHORT).show();
    } else if (id == ACTION_1) {
        Log.i("TAG", "ALLOHA! from button 1");
        Toast.makeText(getActivity(), "Aloha from button 1!", 
Toast.LENGTH_LONG).show();
    } else if (id == ACTION_2) {
        Log.i("TAG", "Hello from button 2");
        Toast.makeText(getActivity(),"Hello from button 2!", 
Toast.LENGTH_LONG).show();
    }
    else if (id == ACTION_3) {
        Log.i("TAG", "Hello from button 3");
        Toast.makeText(getActivity(),"Hello from button 2!", 
Toast.LENGTH_LONG).show();
    }
    else if (id == ACTION_4) {
        Log.i("TAG", "Hello from button 4");
        Toast.makeText(getActivity(),"Hello from button 2!", 
Toast.LENGTH_LONG).show();
    }


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_item_detail, 
container, false);



    return rootView;
}
}
4

2 に答える 2

0

フラグメントに移動するには、フラグメント クラスをインスタンス化してから FragmentManager を使用してトランザクションに進む必要があります。

FragmentClass fragment = new FragmentClass();

getFragmentManager()    
    .beginTransaction()
    .replace(R.id.your_fragment_view, fragment)
    .commit();

現在のアクティビティのすべてのアクションに進むことができます (メイン アクティビティのままであるため)。

于 2015-07-02T20:16:43.407 に答える