【发布时间】:2014-09-30 02:24:12
【问题描述】:
我有以下问题,我有一个 ViewPager,Viewpager 包含一个 Fragment,这个 Fragment 包含一个 textview,其中包含一个 int 值(在本例中为 8000)。我想要的是一种在按下按钮 _Mas500 时获得 500 的方法。当我运行项目时出现此错误:
08-06 22:42:15.687: E/AndroidRuntime(8639): FATAL EXCEPTION: Thread-10
08-06 22:42:15.687: E/AndroidRuntime(8639): java.lang.IllegalStateException: Must be called from main thread of process
接受任何想法!谢谢!
这是我的代码:
public class MainActivity extends ActionBarActivity {
private int _JugLP;
private DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;
private Button _Mas500;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
declarar();
_Mas500.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int n = _JugLP + 500;
mDemoCollectionPagerAdapter.setLP(mViewPager.getCurrentItem(),
n);
mDemoCollectionPagerAdapter.notifyDataSetChanged();
}
});
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
declarar();
}
public void declarar() {
mViewPager = (ViewPager) findViewById(R.id.pager);
_JugLP = 8000;
mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(
getSupportFragmentManager(), _JugLP);
mViewPager.setAdapter(mDemoCollectionPagerAdapter);
_Mas500 = (Button) findViewById(R.id.btn_mas500);
}
@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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public static class DemoCollectionPagerAdapter extends
FragmentStatePagerAdapter {
int _LP;
DemoObjectFragment[] fragments;
public DemoCollectionPagerAdapter(FragmentManager fm, int n) {
super(fm);
_LP = n;
fragments = new DemoObjectFragment[n];
Bundle args = new Bundle();
args.putInt(DemoObjectFragment.ARG_OBJECT, _LP);
fragments[0].setArguments(args);
fragments[1].setArguments(args);
}
@Override
public Fragment getItem(int i) {
return fragments[i];
}
public void setLP(int i, int LP) {
fragments[i].setLP(_LP);
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return POSITION_NONE;
}
@Override
public int getCount() {
// For this contrived example, we have a 100-object collection.
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
return "Titulo";
}
}
/**
* A dummy fragment representing a section of the app, but that simply
* displays dummy text.
*/
public static class DemoObjectFragment extends Fragment {
public static final String ARG_OBJECT = "object";
private TextView _TxtVwLP;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.fragment_collection_object, container, false);
Bundle args = getArguments();
_TxtVwLP = (TextView) rootView.findViewById(android.R.id.text1);
_TxtVwLP.setText(Integer.toString(args.getInt(ARG_OBJECT)));
return rootView;
}
public void setLP(int LP) {
_TxtVwLP.setText(String.valueOf(LP));
}
}
}
【问题讨论】:
-
remove @Override protected void onRestart() { // TODO 自动生成的方法存根 super.onRestart();声明(); }
-
谢谢! mmlooloo,我这样做了,并在公共 DemoCollectionPagerAdapter 中添加了以下代码:
fragments[0]= new DemoObjectFragment(); fragments[1]=new DemoObjectFragment();但是,文本仍然没有改变,我单击按钮并且 textview 上的值没有改变?有人能告诉我我的代码有什么问题吗?
标签: android android-fragments android-viewpager textview illegalstateexception