夸大的膨胀视图

时间:2018-02-20 16:55:23

标签: java android listview android-fragments

这是我的场景:在我的应用程序中,我有一个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}}

如果您需要更多信息,只需发表评论,我就会添加

1 个答案:

答案 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(),我打赌问题就会消失。