3

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

下面是代码:

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) 

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

谢谢你的帮助。

+0

哪条线是104线? – Nickel

+1

'onCreateView'只能返回表示片段的视图。对View的其他操作应该在另一个回调中执行,例如'onViewCreated' –

+0

请参阅http://stackoverflow.com/questions/22422186/cannot-retrieve-data-from-mysql-using-json-and-put-them- in-a-listview-with-fragm/22422550#22422550 –

回答

2

为什么不使用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 
    } 
} 
+0

如果它对你有帮助,请考虑接受这个答案。否则,我们将非常乐意协助您:) –