Java 在 android 上将活动之间的值传递给片段
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/21043150/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Passing value between activity to fragment on android
提问by user3181552
On Activity:
关于活动:
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
Log.v("Test", "Menjalankan intent antar activity ke fragment");
Bundle bundle=new Bundle();
//String message= "From activity";
int nilai=10;
bundle.putInt("Nilai", nilai);
Log.v("Testing", "Data yang akan dikirim "+nilai);
//set Fragmentclass Arguments
Lirik f=new Lirik();
f.setArguments(bundle);
viewPager.setCurrentItem(tab.getPosition());
}
Fragment code:
片段代码:
package com.example.egmim;
import com.example.support.dbAdapter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Lirik extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.lirik_view, container, false);
Log.v("Testing", "Menjalankan proses pengambilan data dari activity");
Bundle bundle = getArguments();
if (bundle != null) {
Log.v("Testing", "Data adalah ");
}else{
Log.v("Testing", "Data null");
}
//searchonDB();
return rootView;
}
}
When compiler said: null exception on line 25. (java.lang.nullexception) and the line 25 is
当编译器说:第 25 行为空异常时。 (java.lang.nullexception) 和第 25 行是
int strtext=getArguments().getInt("Nilai", 0);
What's wrong?
怎么了?
01-10 06:39:53.734: V/Testing(4097): Proses Intent dijalankan, nomor yang dipilih adalah 1
01-10 06:39:54.144: V/Test(4097): Menjalankan intent antar activity ke fragment
01-10 06:39:54.154: V/Testing(4097): Data yang akan dikirim 10
01-10 06:39:54.845: V/Testing(4097): Menjalankan proses pengambilan data dari activity
01-10 06:39:54.875: D/AndroidRuntime(4097): Shutting down VM
01-10 06:39:54.894: W/dalvikvm(4097): threadid=1: thread exiting with uncaught exception (group=0x41465700)
01-10 06:39:55.104: E/AndroidRuntime(4097): FATAL EXCEPTION: main
01-10 06:39:55.104: E/AndroidRuntime(4097): java.lang.NullPointerException
01-10 06:39:55.104: E/AndroidRuntime(4097): at com.example.egmim.Lirik.onCreateView(Lirik.java:24)
01-10 06:39:55.104: E/AndroidRuntime(4097): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478)
回答by nitesh
回答by Spring Breaker
public class MyFragment extends Fragment {
int strtext;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle data = getArguments();
strtext= data.getInt("Nilai");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.lirik_view, container, false);
Log.v("Testing", "Menjalankan proses pengambilan data dari activity");
Log.v("Testing", "Data adalah "+strtext);
return rootView;
}
}
回答by Jitesh Dalsaniya
From Activity you send data with intent as:
从 Activity 发送数据的目的是:
Bundle bundle=new Bundle();
bundle.putString("name", "From Activity");
//set Fragmentclass Arguments
Fragmentclass fragobj=new Fragmentclass();
fragobj.setArguments(bundle);
and in Fragment onCreateView method:
并在 Fragment onCreateView 方法中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext=getArguments().getString("name");
return inflater.inflate(R.layout.fragment, container, false);
}
Or Use constructor in fragment to pass values at fragment object initialization.
或者在片段中使用构造函数在片段对象初始化时传递值。