Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListFragment错误_Android_Android Fragments_Android Listfragment - Fatal编程技术网

Android ListFragment错误

Android ListFragment错误,android,android-fragments,android-listfragment,Android,Android Fragments,Android Listfragment,这是我第一次使用ListFragments,我遇到了一个错误。 所以我的问题是为什么我在这行代码上有一条红线 setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, model.getIncidents())); 我一辈子都搞不懂他们在说什么。我没有看到任何名为list的R.id文件。我现在相信我只需要把listview或textv

这是我第一次使用ListFragments,我遇到了一个错误。 所以我的问题是为什么我在这行代码上有一条红线

setListAdapter(new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, model.getIncidents()));
我一辈子都搞不懂他们在说什么。我没有看到任何名为
list
R.id
文件。我现在相信我只需要把listview或textview放在某个地方。 谢谢你的帮助

编辑

这是我的片段的新代码

public class Incidents_Frag extends ListFragment {
View view;
public static Model model;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {        
    view = inflater.inflate(R.layout.incid, container, false);
    model = new Model();
    setListAdapter(new ArrayAdapter<Incident>(getActivity(),
            android.R.layout.simple_list_item_1, model.getIncidents()));        
    return view;
}

public class MyArrayAdapter extends ArrayAdapter<Item> {
    ArrayList<Incident> items;
    Context context;
    public MyArrayAdapter(Context context, int textViewResourceId,
            ArrayList<Incident> items) {
        super(context, textViewResourceId, items);

        this.context = context;
        this.items = items; 
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        ViewHolder holder = new ViewHolder();
        Item item = items.get(position);

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(R.layout.list_item, parent, false);
            holder.userName = (TextView) row.findViewById(R.id.name);
            row.setTag(holder);
        }
        else
        { 
            holder = (ViewHolder) row.getTag();
        }

        holder.name.setText(item.getName());
        return row;
    }

    public static class ViewHolder
    {
        TextView name;
    }

    public int getCount() {
        return items.size();
    }

}
}
公共类事件\u Frag扩展ListFragment{
视图;
公共静态模型;
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.incid,容器,假);
模型=新模型();
setListAdapter(新的ArrayAdapter(getActivity()),
android.R.layout.simple_list_item_1,model.getEvents());
返回视图;
}
公共类MyArrayAdapter扩展了ArrayAdapter{
数组列表项;
语境;
公共MyArrayAdapter(上下文,int textViewResourceId,
ArrayList项目){
super(上下文、textViewResourceId、项);
this.context=上下文;
这个项目=项目;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
ViewHolder=新的ViewHolder();
Item=items.get(位置);
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(R.layout.list\u项,父项,false);
holder.userName=(TextView)row.findViewById(R.id.name);
row.setTag(支架);
}
其他的
{ 
holder=(ViewHolder)row.getTag();
}
holder.name.setText(item.getName());
返回行;
}
公共静态类视图持有者
{
文本视图名称;
}
public int getCount(){
返回items.size();
}
}
}
我在下面有红线
Item=items.get(位置)

holder.userName=(TextView)row.findViewById(R.id.name)
“无法解析用户名”

holder.name.setText(item.getName())
“类型ClipData.Item的方法getName()未定义”

公共静态类视图持有者

“成员类型ViewHolder不能声明为静态;静态类型只能在静态或顶级类型中声明”


因此,如果我们能够清除这些红线,它可能会起作用,也可能不会起作用。如果您想让我继续沿着这条路径前进,请告知此代码是否位于正确的位置,以及需要进行哪些编辑。默认构造函数只接受字符串数组。您可以传递一个“事件”数组,从而导致该错误

您必须实现自己的ArrayAdapter,它接受对象类型为“Incident”的数组

扩展阵列适配器示例如下所示

public class MyArrayAdapter extends ArrayAdapter<Incident> { // changed from Item to Incident
    ArrayList<Incident> items;
    Context context;
    public MyArrayAdapter(Context context, int textViewResourceId,
            ArrayList<Incident> items) {
        super(context, textViewResourceId, items);

        this.context = context;
        this.items = items; 
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        ViewHolder holder = new ViewHolder();
        Incident item = items.get(position); // item is your accident

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(R.layout.list_item, parent, false);
            holder.name = (TextView) row.findViewById(R.id.name); // updated it is name from holder class
            row.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) row.getTag();
        }

        holder.name.setText(item.getName()); // this is just example item is your Incident, you have to get it's name function whatever that is in your class
        return row;
    }

    public static class ViewHolder
    {
        TextView name;
    }

    public int getCount() {
        return items.size();
    }

}
公共类MyArrayAdapter扩展了ArrayAdapter{//从项更改为事件
数组列表项;
语境;
公共MyArrayAdapter(上下文,int textViewResourceId,
ArrayList项目){
super(上下文、textViewResourceId、项);
this.context=上下文;
这个项目=项目;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视图行=转换视图;
ViewHolder=新的ViewHolder();
事件项=项目。获取(位置);//项目是您的事故
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(R.layout.list\u项,父项,false);
holder.name=(TextView)row.findViewById(R.id.name);//更新了holder类中的名称
row.setTag(支架);
}
其他的
{
holder=(ViewHolder)row.getTag();
}
holder.name.setText(item.getName());//这只是一个例子,item是您的事件,您必须获取它的name函数,不管它在您的类中是什么
返回行;
}
公共静态类视图持有者
{
文本视图名称;
}
public int getCount(){
返回items.size();
}
}

您必须为此创建自己的布局。对于上面的示例,创建list_item.xml,只需添加一个id为name的TextView,它就会工作。

ArrayAdapter
是一个类型化类,因此为了让构造函数接受
事件
对象的列表,您需要调用:
新ArrayAdapter(…)
。关于您的新问题:如果您对布局文件进行了任何更改,请在
@android
命名空间中搜索任何id。特别是,要注意看起来像
@android:id/list
的id。该错误表明您给了某个视图一个id,
ListFragment
使用该id标识布局文件中的
ListView
。我会在
R.layout.incid
(incid.xml)中开始搜索。@MH-Ya,我认为错误似乎很明显,我无法理解的是这个列表片段的
xml
文件是空的。它只是定义了线性布局。任何其他活动/片段中也没有列表视图,它们工作/显示它们应该工作的内容。如果xml文件为空,则不要将其用作片段的视图。您应该对包含id为
@android:id/list
ListView
的布局进行充气,或者不充气自定义布局,让
ListFragment
使用其预定义布局。有关更多详细信息,请参阅。当我尝试制作自定义适配器时,我遇到了更多错误和一些我不完全理解的代码。不过,我很感谢你的努力。看看这篇编辑过的文章,我想我的思路是对的,只需要一个
public class Incidents_Frag extends ListFragment {
View view;
public static Model model;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {        
    view = inflater.inflate(R.layout.incid, container, false);
    model = new Model();
    setListAdapter(new ArrayAdapter<Incident>(getActivity(),
            android.R.layout.simple_list_item_1, model.getIncidents()));        
    return view;
}

public class MyArrayAdapter extends ArrayAdapter<Item> {
    ArrayList<Incident> items;
    Context context;
    public MyArrayAdapter(Context context, int textViewResourceId,
            ArrayList<Incident> items) {
        super(context, textViewResourceId, items);

        this.context = context;
        this.items = items; 
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        ViewHolder holder = new ViewHolder();
        Item item = items.get(position);

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(R.layout.list_item, parent, false);
            holder.userName = (TextView) row.findViewById(R.id.name);
            row.setTag(holder);
        }
        else
        { 
            holder = (ViewHolder) row.getTag();
        }

        holder.name.setText(item.getName());
        return row;
    }

    public static class ViewHolder
    {
        TextView name;
    }

    public int getCount() {
        return items.size();
    }

}
}
public class MyArrayAdapter extends ArrayAdapter<Incident> { // changed from Item to Incident
    ArrayList<Incident> items;
    Context context;
    public MyArrayAdapter(Context context, int textViewResourceId,
            ArrayList<Incident> items) {
        super(context, textViewResourceId, items);

        this.context = context;
        this.items = items; 
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View row = convertView;
        ViewHolder holder = new ViewHolder();
        Incident item = items.get(position); // item is your accident

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(R.layout.list_item, parent, false);
            holder.name = (TextView) row.findViewById(R.id.name); // updated it is name from holder class
            row.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) row.getTag();
        }

        holder.name.setText(item.getName()); // this is just example item is your Incident, you have to get it's name function whatever that is in your class
        return row;
    }

    public static class ViewHolder
    {
        TextView name;
    }

    public int getCount() {
        return items.size();
    }

}