2016-12-02 99 views
0

可以說我有一個片段MyFragment和我創建myFragment1和myFragment2。兩者共享相同的xml佈局,這只是一個圖像按鈕。使用onClick,我該如何做到這一點,以便點擊任一按鈕不會做同樣的事情?使用Android相同的片段多次 - 如何有不同的onclick行動

例如,如果我想myFragment1的按鈕,進入到活動A,我想myFragment2的按鈕,進入到活動B.下面

示例代碼:

public class MyFragment extends Fragment implements View.OnClickListener{ 

    ImageButton myButton; 
    View view; 

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

     myButton = (ImageButton) view.findViewById(R.id.myButton); 
     myButton.setOnClickListener(this); 

     return view; 
    } 


    @Override 
    public void onClick(View v){ 
     //do something 
    } 
} 

從我MainActivity

public class MainActivity extends AppCompatActivity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     LinearLayout windowForMainActivity = (LinearLayout) findViewById(R.id.windowForMainActivity); 

     MyFragment myFragment1 = new MyFragment(); 
     fragmentTransaction.add(windowForMainActivity.getId(),myFragment1); 

     MyFragment myFragment2 = new MyFragment(); 
     fragmentTransaction.add(windowForMainActivity.getId(),myFragment2); 

     fragmentTransaction.commit(); 
    } 
} 

回答

0

由於您已使課程實現了界面,因此在創建片段時,可以覆蓋onClick

MyFragment frag1 = new MyFragment() { 
    @Override 
    public void onClick(View v) { 
     Intent i = new Intent(MainActivity.this, ActivityA.class); 
     MainActivity.this.startActivity(i); 
    } 
}; 

MyFragment frag2 = new MyFragment() { 
    @Override 
    public void onClick(View v) { 
     Intent i = new Intent(MainActivity.this, ActivityB.class); 
     MainActivity.this.startActivity(i); 
    } 
}; 

當然,也有可能是更好的方式來做到這一點本身使用Bundle arguments,例如片段類中。

1

從您的活動首先將數據發送到片段這樣

Bundle bundle = new Bundle(); 
bundle.putString("some_value", "ActivityA"); 
MyFragment myFragment1 = new MyFragment(); 
myFragment1.setArguments(bundle); 
fragmentTransaction.add(windowForMainActivity.getId(),myFragment1); 

Bundle bundle2 = new Bundle(); 
bundle2.putString("some_value", "ActivityB"); 
MyFragment myFragment2 = new MyFragment(); 
myFragment2.setArguments(bundle); 
fragmentTransaction.add(windowForMainActivity.getId(),myFragment2); 

,然後得到這樣

String whichActivity; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    whichActivity = getArguments().getString("some_value");  
    return inflater.inflate(R.layout.fragment, container, false); 
} 

@Override 
    public void onClick(View v){ 
     if(whichActivity.equals("ActivityA")){ 
      //code to start Activity A 
     }else{ 
     //code to start activity B 
     } 
} 
相關問題