2012-10-22 113 views
0

我正在做一个家庭替代应用程序,我使用viewpager有三个3横向导航布局。问题是这些布局存储在三个不同的布局资源文件(layout1.xml,layout2.xml和layout3.xml)中,而不是他们,我想动态地为每个屏幕创建内容。以编程方式创建布局以添加到ViewPager?

这是规定每一页的内容Adapater的摘录:

public Object instantiateItem(View collection, int position) { 
     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     int resId = 0; 
     switch (position) { 
     case 0: 
      resId = R.layout.layout1; 
      break; 
     case 1: 
      resId = R.layout.layout2; 
      break; 
     case 2: 
      resId = R.layout.layout3; 
      break; 
     } 
     View view = inflater.inflate(resId, null); 
     ((ViewPager) collection).addView(view, 0); 
     return view; 
    } 

我如何编程方式创建一个简单的布局,并把它放在我的屏幕之一?我一直在做这方面的工作,找不到任何有关如何做到这一点的线索,任何指向正确方向的信息都会很有用。


编辑:

这就是我现在想,我不认为我是很离谱,但所有屏幕都是空白:

Context context = collection.getContext(); 
LinearLayout layout = new LinearLayout(context); 
TextView view = new TextView(context); 
switch (position) { 
    case 0: 
     view.setText("some text"); 
     view.setPadding(5, 5, 5, 5); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     break; 
    case 1: 
     view.setText("some text"); 
     view.setPadding(5, 5, 5, 5); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     break; 
    case 2: 
     view.setText("some text"); 
     view.setPadding(5, 5, 5, 5); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     break; 
} 
layout.addView(view); 
return layout; 

回答

1

充气布局而不是,创建布局和视图的对象并将其返回。

示例位置1,

LinearLayout layout = new LinearLayout(context); 
switch (position) { 
     case 0: 
      TextView tv = new TextView(context); 
      tv.setText("some text"); 
      tv.setPadding(5, 5, 5, 5); 
      tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
      // And so on customize and create as many views as you want. 

      // And finally add them to your layout 
      layout.addView(tv); 
      return layout; 

     case 1: 
      . 
      . 
      . 
     case 2: 
      . 
      . 
      . 
} 

UPDATE:

问题上的更新后编辑答案。

我已经采取了您的代码并对其进行了修改。这一定是有效的。

@Override 
public Object instantiateItem(View container, int position) { 
    Context context = collection.getContext(); 
    LinearLayout layout = new LinearLayout(context); 
    TextView view = new TextView(context); 

    switch (position) { 

    case 0: 
     view.setText("some text"); 
     view.setPadding(5, 5, 5, 5); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     break; 
    case 1: 
     view.setText("some text"); 
     view.setPadding(5, 5, 5, 5); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     break; 
    case 2: 
     view.setText("some text"); 
     view.setPadding(5, 5, 5, 5); 
     view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
     break; 
    } 
    layout.addView(view); 
    ((ViewPager) container).addView(layout, 0); // This is the line I added 
    return layout; 
} 
+0

我只是试图实现它,应用程序不会崩溃,但我没有看到每个屏幕上的文本(所有屏幕都是空白的)。我编辑了这个问题,以显示我的尝试。你能否看到我是否犯了一些错误? – lisovaccaro

+0

我在阅读完编辑后更新了答案。请检查。 – Enigma

+0

谢谢,它似乎工作。只是一个问题:当我在第二行使用这段代码时,出现错误“集合无法解析”,我将它更改为容器,因为它看起来应该与方法中传递的参数匹配。这个可以吗?一切似乎工作正常,但我想问 – lisovaccaro

相关问题