3

ListView에 작은 문제가 있습니다. 작업을 사용할 때 작동하지만 조각으로 전환하면 작동하지 않습니다. 내가 이미지를 추가 아직 충분한 명성을하지 않아도조각에 대해 ListView가 작동하지 않습니다.

FatalException: NullPointerException 

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

: 오류 메시지

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 

그리고 여기에 있습니다 : 여기

는 코드입니다.

도움 주셔서 감사합니다.

+0

어떤 라인이 104 라인입니까? – Nickel

+1

'onCreateView'는 프래그먼트를 나타내는 뷰만 반환해야합니다. 뷰에 대한 다른 작업은'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

도움이 되었으면이 대답을 수락하는 것을 고려하십시오. 그렇지 않으면, 우리는 당신을 돕기 위해 기꺼이보다 더 행복 할거야. :) –

관련 문제