Android ListFragment错误
这是我第一次使用ListFragments,我遇到了一个错误。 所以我的问题是为什么我在这行代码上有一条红线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
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();
}
}