2015-05-07 24 views
2

我創造我想補充的多個實例片段:多個片斷實例

public class myFragment extends Fragment { 
    int id; 
    public static myFragment newInstance(int id) { 
     myFragment fragment = new myFragment(); 
     int id = id; 
     return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, final ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
    TextView idText = (TextView) 
       rootView.findViewById(R.id.idText); 
    idText.setText(id); 
    return rootView; 
} 

在我的主類,

private int currentID; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState == null) { 
     currentId = 0; 
     FragmentManager manager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = 
        manager.beginTransaction(); 
     oneFragment = new myFragment(); 
     oneFragment.newInstance(currentId); 
     currentId = 2; 
     fragmentTransaction 
       .replace(R.id.container, oneFragment) 
       .commit(); 
     twoFragment = new myFragment(); 
     twoFragment.newInstance(currentId); 
     currentId = 3; 

的問題是,oneFragment快到了ID爲2我不完全確定爲什麼會出現這種情況。該容器是具有垂直方向的LinearLayout,並且Fragment也是線性的。我想使用我爲myFragment重複編寫的所有ID的代碼。

+0

FYI:像你這樣myFragment你不應該與小寫字母開始的類名稱。它應該是MyFragment。 – HailZeon

回答

0

你MyFragment類需要傳輸ID是這樣的:

public class MyFragment extends Fragment { 

    private final static String ID_KEY = "id_key"; 
    public int id; 

    public static MyFragment newInstance(int id) { 
     MyFragment fragment = new MyFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ID_KEY, id); 
     fragment.setArguments(args); 
     return fragment; 
    } 

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

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      id = getArguments().getInt(ID_KEY); 
     } 
    } 
} 

我不認爲你需要創建一個片段,然後調用的newInstance()就可以了。我想你可以放棄調用newInstance()。試試這個:

private int currentID; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState == null) { 
     currentId = 0; 
     FragmentManager manager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = 
        manager.beginTransaction(); 
     MyFragment oneFragment = MyFragment.newInstance(currentId); 
     currentId = 2; 
     fragmentTransaction 
       .replace(R.id.container, oneFragment) 
       .commit(); 
     MyFragment twoFragment = MyFragment.newInstance(currentId); 
     currentId = 3; 
0

你應該通過id使用構造每個片段。所以,每一個片段例如持有其id的成員變量

public class MyFragment extends Fragment { 
    private int id; 

    // constructor 
    public MyFragment() { 
    } 

    public MyFragment(int a) { 
     this.id = a; 
    } 

    // this method is not requreied if you use above Constuctor 
    public myFragment newInstance(int id) { 
     return new myFragment(id); 
    } 

} 

主類:

private int currentID = 0; 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState == null) { 
     currentId = 0; 
     FragmentManager manager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = 
        manager.beginTransaction(); 
     oneFragment = new myFragment(currentID); // id = 0 

     currentId = 2; 
     fragmentTransaction 
       .replace(R.id.container, oneFragment) 
       .commit(); 
     twoFragment = new myFragment(currentID); // id = 2 

     currentId = 3; 
    }