我是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文档和互联网。我找不到解决方案。希望你们中的一些人知道我的代码和解决方案发生了什么,以解决问题
谢谢!
汤姆
答案 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);