我创建了一个具有列表视图并使用标签滑动的应用。 我的问题是当我点击列表视图的任意按钮时,在标签活动中打开第一个标签,但如果我点击第一个按钮,我想要这样做列表视图,在选项卡视图上将打开第一个选项卡,如果我单击列表视图的第二个按钮,在选项卡视图上将打开第二个选项卡。在我的应用程序中,它始终打开选项卡视图上的第一个选项卡:(请参阅下面的代码
MainActivity
public class MainActivity extends Activity {
ActionBar actionBar;
Context c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar=getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#36B0B6")));
ListView lv = (ListView) findViewById(R.id.Main_listView);
lv.setSelector(new ColorDrawable(0));
String[] adobe_products = getResources().getStringArray(R.array.adobe_products);
final String[] sentitem = getResources().getStringArray(R.array.sent_item);
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products));
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(getApplicationContext(), CodeActivity.class);
i.putExtra("product", position );
startActivity(i);
}
});
}
}
CodeActivity
public class CodeActivity extends FragmentActivity implements TabListener {
Context context;;
ViewPager viewPager;
ActionBar actionBar;
private String[] days = new String[]{"Monday","Tuesday","Wednesday","Tuesday","Wednesday"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_code);
Bundle bundle = getIntent().getExtras();
int position = bundle.getInt("product");
viewPager.setCurrentItem(position); // Problem is here
viewPager = (ViewPager)findViewById(R.id.view_pager);
FragmentPagerAdapter adapter = new PagerViewAdapter(getSupportFragmentManager(),this);
viewPager.setAdapter(adapter);
actionBar=getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#36B0B6")));
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#2979FF")));
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
actionBar.setSelectedNavigationItem(arg0);
}
});
for (int i = 0; i < days.length; i++) {
actionBar.addTab(actionBar.newTab().setText(days[i]).setTabListener(this));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onTabChanged(String tabId) {
if (tabId.equals(days)) {
// Show your actual activity here
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// Auto-generated method stub
}
//-----------------------------------------------------------------------
static //----------------------------------------------------------
class TestFragment extends Fragment {
private static final String KEY_CONTENT = " ";
public static TestFragment newInstance(String content) {
TestFragment fragment = new TestFragment();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 1; i++) {
builder.append(content).append("");
}
builder.deleteCharAt(builder.length() - 1);
fragment.mContent = builder.toString();
return fragment;
}
private String mContent = "???";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((savedInstanceState != null)
&& savedInstanceState.containsKey(KEY_CONTENT)) {
mContent = savedInstanceState.getString(KEY_CONTENT);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
TextView text = new TextView(getActivity());
text.setGravity(Gravity.CENTER);
text.setText(mContent);
text.setTextSize(20 * getResources().getDisplayMetrics().density);
text.setPadding(20, 20, 20, 20);
LinearLayout layout = new LinearLayout(getActivity());
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
layout.setGravity(Gravity.CENTER);
layout.addView(text);
return layout;
}
}
//-----------------------------------------------------------------------
class PagerViewAdapter extends FragmentPagerAdapter {
private String[] days;
public PagerViewAdapter(FragmentManager fm, Context context ) {
super(fm);
Resources resources = context.getResources();
days = resources.getStringArray(R.array.adobe_products);
}
@Override
public Fragment getItem(int position) {
return TestFragment.newInstance(days[position % days.length]);
}
@Override
public CharSequence getPageTitle(int position) {
viewPager.setCurrentItem(position);
return days[position % days.length];
}
@Override
public int getCount() {
return days.length;
}
}
}
logcat的
09-11 09:09:41.085: E/AndroidRuntime(1318): FATAL EXCEPTION: main
09-11 09:09:41.085: E/AndroidRuntime(1318): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.offtechitbd.essentialussd/com.offtechitbd.essentialussd.CodeActivity}: java.lang.NullPointerException
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.os.Handler.dispatchMessage(Handler.java:99)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.os.Looper.loop(Looper.java:137)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.ActivityThread.main(ActivityThread.java:5041)
09-11 09:09:41.085: E/AndroidRuntime(1318): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 09:09:41.085: E/AndroidRuntime(1318): at java.lang.reflect.Method.invoke(Method.java:511)
09-11 09:09:41.085: E/AndroidRuntime(1318): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-11 09:09:41.085: E/AndroidRuntime(1318): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-11 09:09:41.085: E/AndroidRuntime(1318): at dalvik.system.NativeStart.main(Native Method)
09-11 09:09:41.085: E/AndroidRuntime(1318): Caused by: java.lang.NullPointerException
09-11 09:09:41.085: E/AndroidRuntime(1318): at com.offtechitbd.essentialussd.CodeActivity.onCreate(CodeActivity.java:50)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.Activity.performCreate(Activity.java:5104)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-11 09:09:41.085: E/AndroidRuntime(1318): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
09-11 09:09:41.085: E/AndroidRuntime(1318): ... 11 more
答案 0 :(得分:1)
在CodeActivity类中onCreated编写以下代码
Bundle bundle = getActivity().getIntent().getExtras();
int position = bundle.getInt("product");
mViewPager.setCurrentItem(position);
答案 1 :(得分:0)
根据,
引起:java.lang.NullPointerException
您正在尝试在投射前更改viewPager
项目,
Bundle bundle = getIntent().getExtras();
int position = bundle.getInt("product");
viewPager.setCurrentItem(position); // viewPager is null as it's been casted after the setCurrentItem() is called,
viewPager = (ViewPager)findViewById(R.id.view_pager);
<强>解决方案吗
在尝试更改项目之前投射viewPager
viewPager = (ViewPager)findViewById(R.id.view_pager);
FragmentPagerAdapter adapter = new PagerViewAdapter(getSupportFragmentManager(),this);
viewPager.setAdapter(adapter);
Bundle bundle = getIntent().getExtras();
int position = bundle.getInt("product");
viewPager.setCurrentItem(position);
特别说明:
确保从索引0
设置viewPager
的第一项