如何处理片段内的视图?

时间:2013-04-09 11:49:27

标签: java android tabs spinner

对不起我的暧昧问题。我会尽力澄清我的问题。 我已经尝试运行此代码来填充我的微调器:

public void UcitajPromenljive(int id)
{
    if(id==0)
    {
        //#SPISAK
    }
    if(id==1)
    {
        //#PRETRAGA
        try
        {
            Spinner oblasti = (Spinner) findViewById(R.id.spinnerOblasti);
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.oblasti, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            oblasti.setAdapter(adapter);
        }
        catch(NullPointerException e)
        {
            Log.e("LOAD_TAG", e.getMessage());
        }
    }
    if(id==2)
    {
        //#OSTALO
    }
}

果然,我确实得到了一个N​​PE,但我在一个类似的问题中发现问题出现在代码的第一行。我的应用程序有三个不同的选项卡,已实现为Fragments。因此,当我运行findViewById(R.id.spinnerOblasti)时,应用程序返回NPE,因为我的布局只有ActionBar和一个相对布局作为其属性,并且相对布局通过

填充
class MyTabListener implements ActionBar.TabListener
{
    public android.app.Fragment fragment;
    private Toast lol;
    public MyTabListener(android.app.Fragment fragment)
    {
        this.fragment = fragment;
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(fragment);
        lol.cancel();
    }
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        lol = Toast.makeText(getApplicationContext(), tab.getText(), Toast.LENGTH_SHORT);
        lol.show();
        ft.replace(R.id.okvir, fragment);
        UcitajPromenljive(tab.getPosition());
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }
}

所以我的问题是 - 我如何处理Spinner,它是某个.xml文件的子文件,它会膨胀其中一个片段(标签)?随意请求澄清,我知道我写的这个有些令人困惑。提前致谢。干杯

1 个答案:

答案 0 :(得分:0)

存储您的片段视图以供参考,即在onCreateView()中将结果视图置于片段的全局范围内,即

protected View mFragementView;

然后当您需要在片段的布局中找到某些内容时:

mFragmentView.findViewById(....);

示例:

public class MyFragment extends Fragment {

    protected View mFragmentView;

    @Override
    public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {    
        mFragmentView = super.onCreateView( inflater, container, savedInstanceState );   
    }

    public void UcitajPromenljive(int id) {
        View v = mFragmentView.findViewById( R.id..... );
    }
}