这是我的场景:在我的应用程序中,我有一个Main活动,两个片段和一个在后台运行的服务。我使用这段代码将片段附加到我的主要活动中:
Fragment f1;
f1=new loginfragment();
FragmentTransaction ft=getFragmentManager().beginTransaction();
ft.add(R.id.frame,f1);
ft.commit();
哪个工作正常。其中一个片段包含一个附加到适配器的列表视图。(我已经验证适配器已正确连接到列表视图,并且条目可以毫无问题地添加到列表视图中。
为了能够扩展listview适配器(扩展BaseAdapter)中的布局,我创建了一个构造函数来向其提供Context。
后台服务定期检查页面,并使用片段实现的接口将结果发送到其中一个片段(发送广播对我不起作用)。
接口定义如下:
< / p>
interface resultInterface{
void receive(String s,Context con);
}
片段实现了这样的接口:
@Override
public void receive(String s,Context con){
String elements[]=s.split("<br>");
if(elements.length>1) {
if(elements[0].equals("REQUEST")) {
init_notification("REQUEST",detect(elements[1],elements[2]));// a function that shows a notification
item i = new item(elements[1], elements[2]);
orders.add(i);
adapter = new listview_adapter(orders,c);
list.setAdapter(adapter);}
}
}
orders是一个Arraylist,c是传递给listview适配器的上下文。 service调用此接口方法如下:
resultInterface resultinterface=new servefragment();
resulstinterface.receive(s,this);
收到数据(导致调用接口方法)后,片段方法应该拆分数据并将条目添加到列表视图中。(我已经验证数据正确传递给接口方法。
但是,作为列表视图条目显示的视图不正确(以某种方式看起来已损坏)。以下是它应该看起来的样子(使用虚拟数据):Like this
但这里是它们实际添加的方式(从服务器收到的1个项是正确的,但布局不正确):{{ 3}}
如果您需要更多信息,只需发表评论,我就会添加
答案 0 :(得分:0)
我的猜测是,您的服务传递给您的Context
对象具有与您期望的不同的主题。这可能导致文本颜色,按钮颜色等都发生变化。
为了能够扩展listview适配器(扩展BaseAdapter)中的布局,我创建了一个构造函数来向其提供Context。
除非您需要Context
实例,而不是getView()
内部,否则您不必通过构造函数传递Context
。这是getView()
方法的完整签名:
public View getView(int position, View convertView, ViewGroup parent)
parent
参数保证为非空,并且所有View
个实例都有getContext()
方法,因此您始终可以通过编写{{Context
来检索parent.getContext()
1}}。此外,这将是您的活动(与您的应用程序类似),它具有正确主题的额外好处。
因此,删除所有将Context
传递到适配器的代码,然后只使用parent.getContext()
,我打赌问题就会消失。