ListView不适用于片段(ListView doesn't work for fragment)

编程入门 行业动态 更新时间:2024-10-23 08:38:51
ListView不适用于片段(ListView doesn't work for fragment)

我的ListView有一个小问题,它在我使用Activity时有效但当我切换到片段时它不起作用。

这是代码:

package com.groupex.tp_mobile; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView.FindListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.zip.Inflater; public class Fragment1 extends Fragment implements OnItemClickListener{ ListView listView; communicator communic; String[] nameMenu; String[] menuDescription; int[] images={R.drawable.pizza, R.drawable.frenchfries, R.drawable.fishsoup, R.drawable.tomatosoup}; public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { // Inflate the layout for this fragment View view=inflater.inflate(R.layout.fragment1, container, false); listView=(ListView) view.findViewById(R.id.menu1); Resources resources=getResources(); nameMenu=resources.getStringArray(R.array.nameMenu); menuDescription=resources.getStringArray(R.array.menuDescription); CustomAdapter adapter=new CustomAdapter(container.getContext(), nameMenu, images, menuDescription); listView.setAdapter(adapter); listView.setOnItemClickListener(this); return view; } class CustomAdapter extends ArrayAdapter<String>{ Context context; int[] imags; String[] nameMenuArray; String[] menuDescriptionArray; CustomAdapter(Context c, String[] titles, int imgs[], String[] descri){ super(c, R.layout.singlerow, R.id.textViewNom, titles); this.context=c; this.imags=imgs; this.nameMenuArray=titles; this.menuDescriptionArray=descri; } class MyViewHolder{ ImageView MyImage; TextView MyTitle; TextView MyDescription; public MyViewHolder(View view) { // TODO Auto-generated constructor stub MyImage=(ImageView)view.findViewById(R.id.images); MyTitle=(TextView)view.findViewById(R.id.textViewNom); MyDescription=(TextView)view.findViewById(R.id.textViewFonction); } } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View row=convertView;//On recuere le relative layout MyViewHolder holder=null; if(row==null){ LayoutInflater inflater=(LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); row=inflater.inflate(R.layout.singlerow, parent, false); holder=new MyViewHolder(row); //We store the holder in the row by using setTag(Object) row.setTag(holder); android.util.Log.d("Dehii", "New row has been created"); } //Recyclage. else{ holder=(MyViewHolder) row.getTag(); android.util.Log.d("Dehii", "Recycling a row"); } holder.MyImage.setImageResource(imags[position]); holder.MyTitle.setText(nameMenuArray[position]); holder.MyDescription.setText(menuDescription[position]); return row; } } @Override public void onItemClick(AdapterView<?> arg0, View view, int i, long l) { // TODO Auto-generated method stub } public void setCommunicator(communicator commun){ this.communic=commun; } public interface communicator{ public void respond(int index); } } // End class definition

这是错误消息:

FatalException: NullPointerException Fragment.customAdapter.$CustomView(Fragment1.java:104) . . . . . android.widget.ListView.OnMeasure(ListView java:1175)

我还没有足够的声誉来添加图片。

感谢您的帮助。

i have a small problem with my ListView, It works when i use an Activity but when I switch to a fragment it doesn't work.

Here is the code:

package com.groupex.tp_mobile; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView.FindListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.zip.Inflater; public class Fragment1 extends Fragment implements OnItemClickListener{ ListView listView; communicator communic; String[] nameMenu; String[] menuDescription; int[] images={R.drawable.pizza, R.drawable.frenchfries, R.drawable.fishsoup, R.drawable.tomatosoup}; public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { // Inflate the layout for this fragment View view=inflater.inflate(R.layout.fragment1, container, false); listView=(ListView) view.findViewById(R.id.menu1); Resources resources=getResources(); nameMenu=resources.getStringArray(R.array.nameMenu); menuDescription=resources.getStringArray(R.array.menuDescription); CustomAdapter adapter=new CustomAdapter(container.getContext(), nameMenu, images, menuDescription); listView.setAdapter(adapter); listView.setOnItemClickListener(this); return view; } class CustomAdapter extends ArrayAdapter<String>{ Context context; int[] imags; String[] nameMenuArray; String[] menuDescriptionArray; CustomAdapter(Context c, String[] titles, int imgs[], String[] descri){ super(c, R.layout.singlerow, R.id.textViewNom, titles); this.context=c; this.imags=imgs; this.nameMenuArray=titles; this.menuDescriptionArray=descri; } class MyViewHolder{ ImageView MyImage; TextView MyTitle; TextView MyDescription; public MyViewHolder(View view) { // TODO Auto-generated constructor stub MyImage=(ImageView)view.findViewById(R.id.images); MyTitle=(TextView)view.findViewById(R.id.textViewNom); MyDescription=(TextView)view.findViewById(R.id.textViewFonction); } } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View row=convertView;//On recuere le relative layout MyViewHolder holder=null; if(row==null){ LayoutInflater inflater=(LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); row=inflater.inflate(R.layout.singlerow, parent, false); holder=new MyViewHolder(row); //We store the holder in the row by using setTag(Object) row.setTag(holder); android.util.Log.d("Dehii", "New row has been created"); } //Recyclage. else{ holder=(MyViewHolder) row.getTag(); android.util.Log.d("Dehii", "Recycling a row"); } holder.MyImage.setImageResource(imags[position]); holder.MyTitle.setText(nameMenuArray[position]); holder.MyDescription.setText(menuDescription[position]); return row; } } @Override public void onItemClick(AdapterView<?> arg0, View view, int i, long l) { // TODO Auto-generated method stub } public void setCommunicator(communicator commun){ this.communic=commun; } public interface communicator{ public void respond(int index); } } // End class definition

And here is the error messages :

FatalException: NullPointerException Fragment.customAdapter.$CustomView(Fragment1.java:104) . . . . . android.widget.ListView.OnMeasure(ListView java:1175)

I don't have enough reputation yet to add an image.

Thank you for your help.

最满意答案

你为什么不使用ListFragment?

public class MyListFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values); setListAdapter(adapter); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // do something with the data } }

Why don't you use a ListFragment?

public class MyListFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values); setListAdapter(adapter); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // do something with the data } }

更多推荐

本文发布于:2023-04-29 12:26:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1336307.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:片段   不适用于   ListView   work   fragment

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!