2014-11-19 1 views
7

수많은 자습서와 예제 프로젝트를 따라 가면서 ListView를 채울 행에 여러 값이 포함 된 행을 채워야하는 다음 코드가 나타납니다. 목적.

초보 프로그래머이기 때문에 나는 내 인생에서 내 코드가 실패한 곳을 알아낼 수 없다. 어떤 도움을 많이 주시면 감사하겠습니다!

중요한 정보를 빠뜨린 경우 알려 주시면이 질문을 업데이트하겠습니다.

조각 위치 안에 모든 것을 시작하는 코드 :

@Override 
    public void onActivityCreated(Bundle savedInstanceState){ 
     super.onActivityCreated(savedInstanceState); 
     Intent i = getActivity().getIntent(); 

     if (i.getSerializableExtra("ChosenWorkorder") != null){ 

      Workorder selectedWorkorder = (Workorder) i.getSerializableExtra("ChosenWorkorder");     

      ArticlesListAdapter articlesListAdapter = new ArticlesListAdapter(getActivity(), R.layout.articles_list_row, selectedWorkorder.GetAllLines()); 

      ListView articlesList = (ListView) getActivity().findViewById(R.id.ArticlesList); 
      articlesList.setAdapter(articlesListAdapter); 

     } 
    } 

사용자 정의 ArrayAdapter와 : 아래

public class ArticlesListAdapter extends ArrayAdapter<Line> { 

    private List<Line> lineList; 
    private Context context; 

    public ArticlesListAdapter(Context context, int textViewResourceId, List<Line> objects) { 
    super(context, textViewResourceId, objects); 
     this.lineList = objects; 
     this.context = context; 
    } 

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

    public Line getItem(int position) { 
     return lineList.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    @SuppressLint("ViewHolder") /* Que? */ 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.articles_list_row, parent, false); 

     TextView articleName = (TextView)  rowView.findViewById(R.id.textArticleName); 
     EditText articleAmount = (EditText)  rowView.findViewById(R.id.textArticleAmount); 

     Line articleLine = lineList.get(position); 

     articleName.setText(articleLine.getLineArticleDescription()); 
     articleAmount.setText(articleLine.getLineArticleAmount().toString()); 

     return parent;  
    } 
} 

는 (나에게 아무것도 의미) 설명에 대한 로그 캣 로그입니다.

E/AndroidRuntime(15941): FATAL EXCEPTION: main 
E/AndroidRuntime(15941): Process: be.mabolifting.maboserve, PID: 15941 
E/AndroidRuntime(15941): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
E/AndroidRuntime(15941): at android.widget.ListView.setupChild(ListView.java:1826) 
E/AndroidRuntime(15941): at android.widget.ListView.makeAndAddView(ListView.java:1793) 
E/AndroidRuntime(15941): at android.widget.ListView.fillDown(ListView.java:691) 
E/AndroidRuntime(15941): at android.widget.ListView.fillFromTop(ListView.java:752) 
E/AndroidRuntime(15941): at android.widget.ListView.layoutChildren(ListView.java:1630) 
E/AndroidRuntime(15941): at android.widget.AbsListView.onLayout(AbsListView.java:2087) 
E/AndroidRuntime(15941): at android.view.View.layout(View.java:14860) 
E/AndroidRuntime(15941): at android.view.ViewGroup.layout(ViewGroup.java:4643) 
E/AndroidRuntime(15941): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) 
E/AndroidRuntime(15941): at android.view.View.layout(View.java:14860) 
E/AndroidRuntime(15941): at android.view.ViewGroup.layout(ViewGroup.java:4643) 
E/AndroidRuntime(15941): at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1594) 
E/AndroidRuntime(15941): at android.view.View.layout(View.java:14860) 
E/AndroidRuntime(15941): at android.view.ViewGroup.layout(ViewGroup.java:4643) 
E/AndroidRuntime(15941): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
E/AndroidRuntime(15941): at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
E/AndroidRuntime(15941): at android.view.View.layout(View.java:14860) 
E/AndroidRuntime(15941): at android.view.ViewGroup.layout(ViewGroup.java:4643) 
E/AndroidRuntime(15941): at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374) 
E/AndroidRuntime(15941): at android.view.View.layout(View.java:14860) 
E/AndroidRuntime(15941): at android.view.ViewGroup.layout(ViewGroup.java:4643) 
E/AndroidRuntime(15941): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
E/AndroidRuntime(15941): at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
E/AndroidRuntime(15941): at android.view.View.layout(View.java:14860) 
E/AndroidRuntime(15941): at android.view.ViewGroup.layout(ViewGroup.java:4643) 
E/AndroidRuntime(15941): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2013) 
E/AndroidRuntime(15941): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1770) 
E/AndroidRuntime(15941): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1019) 
E/AndroidRuntime(15941): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5725) 
E/AndroidRuntime(15941): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
E/AndroidRuntime(15941): at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
E/AndroidRuntime(15941): at android.view.Choreographer.doFrame(Choreographer.java:544) 
E/AndroidRuntime(15941): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
E/AndroidRuntime(15941): at android.os.Handler.handleCallback(Handler.java:733) 
E/AndroidRuntime(15941): at android.os.Handler.dispatchMessage(Handler.java:95) 
E/AndroidRuntime(15941): at android.os.Looper.loop(Looper.java:136) 
E/AndroidRuntime(15941): at android.app.ActivityThread.main(ActivityThread.java:5086) 
E/AndroidRuntime(15941): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(15941): at java.lang.reflect.Method.invoke(Method.java:515) 
E/AndroidRuntime(15941): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
E/AndroidRuntime(15941): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
E/AndroidRuntime(15941): at dalvik.system.NativeStart.main(Native Method) 
+0

return rowView; 반환 부모 대신; 어댑터의 getView() 메소드에서. – Kamal

+0

laalto 답을 정답으로 표시하고 @Blaze tama가 제안한 코드도 수정하십시오 –

답변

8

: 더 나은 결과를

ViewHolder 패턴을 사용 상위보기는 파라메터로만 제공되므로 뷰 인플레이션은 match_parent 크기 등을 처리 할 수 ​​있습니다.

+0

이것으로 해결되었습니다! 정말 고마워! – Hetiwos

+0

도와주세요. http://stackoverflow.com/questions/30951608/java-lang-classcastexception-android-view-viewgrouplayoutparams-cannot-be-cast – Aditya

2

이 시도 :

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = inflater.inflate(R.layout.articles_list_row, parent, false); 

    TextView articleName = (TextView) convertView.findViewById(R.id.textArticleName); 
    EditText articleAmount = (EditText) convertView.findViewById(R.id.textArticleAmount); 

을 요점은 생성 해달라고하는 View 새로운 :

View rowView = inflater.inflate(R.layout.articles_list_row, parent, false); 

대신 항목의 행을 참조하는 View "제공"을 사용

convertView = inflater.inflate(R.layout.articles_list_row, parent, false); 

마찬가지로 @lallto (다른 답변)은 현재 목록 항목을 반환하기 위해 returnreturn convertView;으로 변경했습니다. 행보기가 아닌를 반환해야합니다,

return parent;  

return rowView; 

getView()에 변경하려면 getView()에서

http://www.vogella.com/tutorials/AndroidListView/article.html

+0

이 답변은 최적화에 사용될 수 있습니다.OP의 실제 질문에 대한 답은 무엇입니까 - ClassCastException? –

+0

모든 추가 정보를 제공해 주셔서 감사합니다. 당신이 더 빠르기 때문에 나는 이것을 답으로 표시 할 것입니다. – Hetiwos

+0

그게 .. !! – Nils

2
대신 부모의 getView 및 또한 ListView에 성능 향상 ViewHolder 디자인 패턴을 사용

반환 convertView 참조 :

public View getView(int position, View convertView, ViewGroup parent) { 
    Viewholder viewholder; 
    if(convertView==null){ 
     viewholder = new Viewholder(); 
     convertView = LayoutInflater.from(context).inflate(R.layout.articles_list_row, null); 
     viewholder.articleName = (TextView) convertView.findViewById(R.id.textArticleName); 
     viewholder.articleAmount = (EditText) convertView.findViewById(R.id.textArticleAmount); 
     convertView.setTag(viewholder); 
    }else{ 
     viewholder =(Viewholder) convertView.getTag(); 
    } 

    viewholder.articleName.setText(lineList.get(position).getLineArticleDescription()); 
    viewholder.articleAmount.setText(lineList.get(position).getLineArticleAmount().toString()); 

    return convertView; 
} 

class Viewholder { 
    TextView articleName; 
    EditText articleAmount; 
} 
+0

같은 호 http://stackoverflow.com/questions/30951608/java-lang -classcastexception-android-view-viewgrouplayoutparams-cast 할 수 없습니다. – Aditya

0

당신은 새로운 LinearLayout.LayoutParams 새로운 RelativeLayout의이어야의 LayoutParams이 경우, 부모에 따라 선택해야합니다을 .LayoutParams.

관련 문제