2016-05-06 20 views
2

有這麼多的方式,但我使用這一個:通行證數據

活動:(Main2Activity)

public class Main2Activity extends AppCompatActivity{ 

private String myString = "hello"; 

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

public String getMyData() { 
    return myString; 
} 
} 

片段:

public class MyFragment extends android.support.v4.app.Fragment{ 

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

    Main2Activity activity = (Main2Activity) getActivity(); 
    String myDataFromActivity = activity.getMyData(); 
    return view; 
} 
} 

主活動:

public class MainActivity extends AppCompatActivity { 

    ------- 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    } 
     --- 
    private void setupViewPager(ViewPager viewPager) { 

    Adapter adapter = new Adapter(getSupportFragmentManager()); 
    adapter.addFragment(new MyFragment(), "MyFragment"); 

    viewPager.setAdapter(adapter); 
    } 

但它給我的類拋出異常:

java.lang.ClassCastException: com.example.dev03.xyz.Activities.MainActivity cannot be cast to com.example.dev03.xyz.Fragments.MyActivity 

java.lang.ClassCastException: com.example.dev03.xyz.Fragments.MainActivity cannot be cast to com.example.dev03.xyz.Fragments.Main2Activity 

- 包是相同的。

感謝

+0

https://guides.codepath.com/android/ViewPager-with-FragmentPagerAdapter – USKMobility

回答

3

您創建MainActivity您的片段,它屬於它,所以您在使用getAcitvity()得到MainActivity代替Main2Activity。

+0

Yeaaah! ,這似乎是有意義的。(+ 1)..我應該在這裏使用getActivity的地方。 – Minkoo

1

嘗試使你的getMyData()靜態

public static String getMyData() { 
return myString; 

}

,然後訪問它的片段像

Main2Activity.getMyData(); 
+0

你是對的! – Minkoo

1

您的活動,請執行下列操作

MyFragment fragmentObj=new MyFragment(); 
Bundle args = new Bundle(); 
args.putString("Data_Key", string_value); 
fragmentObj.setArguments(args); 

現在使用FragmentTransaction將此片段添加到堆棧。

在此之後,在你的碎片類的onCreateView做以下

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

View rootView = inflater.inflate(R.layout.fragment_xml_view, container, false); 
    if (getArguments() != null) 
    { 
     String valueReceived = getArguments().getString("Data_Key"); 
    } 
return rootView; 
} 
+0

這GUD ..但我下面用不同的方式,不使用交易或捆綁。我很感激。感謝哥們 – Minkoo

+0

@Minkoo這是標準的方法。不建議使用getter setter。 – Stallion

+0

謝謝哥們,正你是正確的,今天我讀到,甚至在它具有鬆耦合。謝謝我以後肯定會使用這種方法。 – Minkoo

1

創建的MainActivity2對象和訪問方法如下:

MainActivity2 mn2=new ManiActivity2(); 
mn2.getMyData(); 
+0

您無法創建活動對象。 – Piyush

+0

Yesssssss !!!這是一個愚蠢的錯誤,但你得到了那個愚蠢的錯誤。謝謝巴迪... – Minkoo

+0

@Minkoo大:) –

1

如果要完成這個工作你必須必須保持你的myFragment到Main2Activity而不是MainActivity。

+0

我很感激,但它是一個愚蠢的錯誤...我應該使用像,MainActivity2 mn2 = new ManiActivity2(); mn2.getMyData(); – Minkoo

1

創建MainActivity2的對象,並簡單地從碎片類

1

我搜索了一整天打電話給你getMyData方法,最後我得到了完美的解決方案:如果有同樣的問題任何人都可以按照這個答案。

不需要在Main2Activity中創建任何方法並從MyFragment中調用它。最佳做法是,使用startActivityForResult和onActivityResult。 下面是代碼:

片段:

public class MyFragment extends android.support.v4.app.Fragment{ 

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

    Intent i = new Intent(getActivity(), Main2Activity.class); 
      startActivityForResult(i, 1); 
    } 
    } 

Main2Activity:

public class Main2Activity extends AppCompatActivity{ 

private String myString = "hello"; 

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

    Intent returnIntent = new Intent(); 
      returnIntent.putExtra("result", selectedPath1); 
      returnIntent.putExtra("result2", selectedPath2); 
      setResult(Activity.RESULT_OK, returnIntent); 
      finish(); 

} 
} 

簡單。