通过工具栏中的微调器切换片段
Switch fragments through spinner in toolbar
这让我发疯。我试图通过使用 spinner
来切换 fragments
,但我不知道我的错误在哪里。当我点击其中一个 spinner
项时,它总是显示 片段 3 的内容,其他的不会出现。
我现在在网上浏览了几个小时,但找不到可以理解的解决方案来解决我的问题,因为我是 android 编程的新手。
感谢您的帮助!
MainActivity.java
// Setup spinner
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(new MyAdapter(
toolbar.getContext(),
new String[]{
"Fragment 1",
"Fragment 2",
"Fragment 3"
}));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// When the given dropdown item is selected, show its contents in the
// container view.
switch (position) {
case 0:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment1.newInstance()).commit();
case 1:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment2.newInstance()).commit();
default:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment3.newInstance()).commit();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Fragment1.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1Fragment extends Fragment {
public static Fragment1Fragment newInstance() {
Fragment1Fragment fragment = new Fragment1Fragment();
return fragment;
}
public Fragment1Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_fragment1, container, false);
return rootView;
}
}
亲爱的,
switch (position) {
case 0:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment1.newInstance()).commit();
break;
case 1:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment2.newInstance()).commit();
break;
default:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment3.newInstance()).commit();
break;
}
没有 break 语句,你的所有 3 行都执行了。所以第三个片段。
这让我发疯。我试图通过使用 spinner
来切换 fragments
,但我不知道我的错误在哪里。当我点击其中一个 spinner
项时,它总是显示 片段 3 的内容,其他的不会出现。
我现在在网上浏览了几个小时,但找不到可以理解的解决方案来解决我的问题,因为我是 android 编程的新手。
感谢您的帮助!
MainActivity.java
// Setup spinner
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(new MyAdapter(
toolbar.getContext(),
new String[]{
"Fragment 1",
"Fragment 2",
"Fragment 3"
}));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// When the given dropdown item is selected, show its contents in the
// container view.
switch (position) {
case 0:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment1.newInstance()).commit();
case 1:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment2.newInstance()).commit();
default:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment3.newInstance()).commit();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
Fragment1.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1Fragment extends Fragment {
public static Fragment1Fragment newInstance() {
Fragment1Fragment fragment = new Fragment1Fragment();
return fragment;
}
public Fragment1Fragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_fragment1, container, false);
return rootView;
}
}
亲爱的,
switch (position) {
case 0:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment1.newInstance()).commit();
break;
case 1:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment2.newInstance()).commit();
break;
default:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment3.newInstance()).commit();
break;
}
没有 break 语句,你的所有 3 行都执行了。所以第三个片段。