在Tabwidget中通过java代码而不是XML添加微调器

时间:2010-10-01 15:37:23

标签: android tabwidget

我是android的新手。最近我学习了如何创建Tabwidget。这个功能很有用。但我发现我无法在R.layout.xxxx中添加我想要的小部件。所以我尝试用java代码来做。但不幸的是它失败了。

通过使用XML,我执行以下操作。该程序没有问题。

public class ShowBalanceActivity extends Activity implements AdapterView.OnItemSelectedListener
{
  private Spinner monthview;
  private ArrayAdapter monthadapter;

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.balance);

        monthadapter = ArrayAdapter.createFromResource(
                this, R.array.months, android.R.layout.simple_spinner_item);
        monthadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        monthview = (Spinner) findViewById(R.id.monthlist);

 monthview.setOnItemSelectedListener(this);
 monthview.setAdapter(monthadapter);

    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
    {

    }

}

对于Java代码部分,我使用以下内容,

public class BalanceLayout extends TabActivity implements TabHost.TabContentFactory
{

    private Activity activity;
    private LayoutInflater inflaterHelper = null;  
    private Spinner monthview = null;
    private LinearLayout layout;
    private static final String Tab1 = "By Date";
    private static final String Tab2 = "By Categories";
    private ArrayAdapter <String> monthadapter = null;

    public BalanceLayout (Activity a) 
    {  
           activity = a;  
           inflaterHelper = a.getLayoutInflater();  
    }

public View addCustomView(String id)
    {  

        layout = new LinearLayout(activity);  
        layout.setOrientation(LinearLayout.VERTICAL);  

        if(id.equals(Tab1))
        {  

            Spinner monthview = new Spinner(activity);
         ArrayAdapter <String> monthadapter = new ArrayAdapter <String> (this,
                   android.R.layout.simple_dropdown_item_1line, MONTHS);
            monthadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            monthview.setAdapter(monthadapter);

            monthview.setOnItemSelectedListener(
                    new AdapterView.OnItemSelectedListener() 
                    {
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
                        {

                        }

                        public void onNothingSelected(AdapterView<?> parentView) 
                     {

                     }


                    });
            layout.addView(monthview,  
                    new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));  

        }  

        else if(id.equals(Tab2))
        {  

        }  

        return layout;  
    } 

}

但是当我执行程序时它会导致强制关闭。似乎我不能使用findViewById方法来创建像XML这样的视图。

我阅读了很多文档并搜索了android文档和互联网。我找不到解决方案。希望你们中的一些人知道我的代码和解决方案发生了什么,以解决问题

谢谢!

汤姆

1 个答案:

答案 0 :(得分:0)

检查完代码并调试后。最后很容易解决。但最初我不知道为什么。然后我通过插入textview来隔离问题。

TextView tv = new TextView(activity); tv.setText(“这是一个文本视图”);

layout.addView(tv,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));

我的代码的问题是使用“this”而不是“activity”。这是因为我想动态创建布局而不使用内容工厂或intent方法。所以“这个”被活动所取代。然后问题就解决了。但我花了很多时间来排除故障。 Android很棒

monthadapter = ArrayAdapter.createFromResource(                     activity,R.array.months,android.R.layout.simple_spinner_item);             monthadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);