在我的应用程序中,我有三个片段。在第三个片段中,变量来自seekBar。现在我想在MainActivity中使用这个变量。我尝试发送带有intent的变量并在textView onClick中显示它来测试它,但textView只显示“null”。为什么变量不发送到活动?
我的主要活动:
public class MainActivity extends AppCompatActivity {
TextView textTest;
public int a = 33;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textTest = (TextView) findViewById(R.id.textView3);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = getIntent();
String messages = intent.getStringExtra("message");
textTest.setText(String.valueOf(messages));
}
});
}
}
发送变量的My Fragment:
public class ItemThreeFragment extends Fragment {
SeekBar seekBar;
TextView textView11;
int value = 10;
public static ItemThreeFragment newInstance() {
ItemThreeFragment fragment = new ItemThreeFragment();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_item_three, container, false);
seekBar = (SeekBar) view.findViewById(R.id.seekBar);
seekBar.setMax(25);
seekBar.setProgress(value);
textView11 = (TextView) view.findViewById(R.id.textView11);
textView11.setText("" + value);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
value = i;
textView11.setText("" + value);
Intent intent = new Intent(getActivity().getBaseContext(),
MainActivity.class);
intent.putExtra("message", value);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
})
return view;
}
}
答案 0 :(得分:2)
问题是
在您的活动中,Intent intent = getIntent();
将获得启动MainActivity的意图。
在您的片段onProgressChanged
中,您的代码根本不与MainActivity通信。
我现在可以想到两个相对简单的解决方案:
使用片段中的((MainActivity) getActivity()).someFunction()
调用MainActivity函数。
在MainActivity中,使用((YourFragment) getSupportFragmentManager().findFragmentById(R.id.your_fragment_id)).property
访问片段对象的内容。您可以将搜索栏值放入类变量中。
并检查一下:Communicating between a fragment and an activity - best practices
答案 1 :(得分:0)
getActivity()findViewById(R.id.textView3).setText("&#34 +值); 将代码放在onProgressChanged()中,希望对你有帮助。
答案 2 :(得分:-1)
我认为你错过了startActivity(intent)
。
Intent intent = new Intent(getActivity().getBaseContext(),
MainActivity.class);
intent.putExtra("message", value);
getActivity().startActivity(intent);