gpt4 book ai didi

android - 在 Spinner 中显示数据库中的数据时 FragmentActivity 中的 Nullpointer 异常

转载 作者:行者123 更新时间:2023-11-30 03:10:08 27 4
gpt4 key购买 nike

我在使用 FragmentPagerAdapter 声明我的可滑动标签的 FrameActivity 中遇到问题。在其中一个选项卡中包含微调器,我想在其中从数据库中收集数据。首先我要发布我的 FrameActivity

     public class TranscationMain extends FragmentActivity implements
ActionBar.TabListener {
Context context;
private ViewPager viewPager;
Spinner spinner_question ;
ContentValues values;
SQLiteDatabase sql_lite_db_obj;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
Cursor cursor;
int i =0;
// Tab titles
private String[] tabs = { "Shipped In", "shipped Out", "New Entry" };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.transcation_main);

AndroidContext.setContext(this);
sql_lite_db_obj = DatabaseHelper.getInstance().getDb();
values = new ContentValues();

// Initilization
context = this;
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);


spinner_question = (Spinner)findViewById(R.id.spinner_category);


// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
}
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override
public void onPageSelected(int position) {

actionBar.setSelectedNavigationItem(position);
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}

@Override
public void onPageScrollStateChanged(int arg0) {
}
});


}

@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub

}

@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(arg0.getPosition());

}

@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub

}
public void clickHandler(View v)
{

if (v.getId() == R.id.btn_new_category_id) {
// btn click event that define in NewEntry.java calss
// click on this button alert dialog will open with editext
// from where i insert data in database. which i have to show in
// spinner which define in same activity. Insertion of data is
// done successfully.
}

}
private void insertData(String category) {
// method to insert data in database
// working fine
}

现在这是上面代码的异常部分

   private void loadSpinnerData() {  
DatabaseHelper db = new DatabaseHelper(getApplicationContext());
List<String> lables = db.getAllLabels();
System.out.println(" data in array : "+lables);

// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, lables);
System.out.println(" dapater : "+dataAdapter);

// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

// attaching data adapter to spinner
spinner_question.setAdapter(dataAdapter);
}

我想在这个 block 中调用这个方法

       if (v.getId() == R.id.btn_new_category_id) {
loadSpinnerData()
}

但我总是收到 NullPointer 异常。只是因为

的初始化
        spinner_question = (Spinner)findViewById(R.id.spinner_category);

Spinner 没有定义在上面的 TranscationMain 布局中,它定义在下面的 Fragment 中

        public class NewEntry extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
spnr = new Spinner(getActivity());
View rootView = inflater.inflate(R.layout.new_entry, container, false);

return rootView;
}

这就是为什么我在下面的行中出现异常。

   spinner_question.setAdapter(dataAdapter);  

现在我不明白我该如何解决这个问题。如何在 Fragment.spinner 中绑定(bind)数据。我是 fragment Activity 的新手。在此先感谢大家

最佳答案

Spinner is not define in above TranscationMain's layout, It define in below Fragment

这就是崩溃的原因。

findViewById 在当前展开的布局中查找 View 。

如果微调器在 fragment 中,则需要在 fragment 中对其进行初始化,然后将项目从数据库加载到 fragment 中的微调器。

fragment 中

Spinner spinner_question;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.new_entry, container, false);
spinner_question = (Spinner)rootView.findViewById(R.id.spinner_category);
return rootView;
}

关于android - 在 Spinner 中显示数据库中的数据时 FragmentActivity 中的 Nullpointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21114106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com