2014-06-21 3 views
0

임 그림처럼 UI를 만들기 :. SketchGRIDVIEW 항목에 2 레이아웃을 팽창 = CRASH :(

  1. 그래서 나는 그것이 작은 메뉴로 내용을 변경하는 GRIDVIEW 항목을 클릭하면 그

    ?

  2. 그것은 잘 된 unti 작동합니다 adapter.notifyDataSetChanged() :이 접근하는 올바른 방법은 무엇

  3. 내 솔루션, 클릭에 를 항목을 팽창과 함께 새로 고침, 2 개 레이아웃이었다 l 아래로 스크롤하여 (항목이 보이지 않을 때까지) 그리고 나서 충돌합니다. 내가 그것을 충돌 계속 시도 상관없이

    public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    RecordHolder holder = null; 
    
    
    Item item = data.get(position); 
    LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
    
    if (row == null) { 
    
        row = inflater.inflate(layoutResourceId, parent, false); 
        holder = new RecordHolder(); 
        holder.txtTitle = (TextView) row.findViewById(R.id.item_text); 
        holder.imageItem = (ImageView) row.findViewById(R.id.item_image); 
        row.setTag(holder); 
    } 
    else { 
        holder = (RecordHolder) row.getTag(); 
    } 
    
    if(item.showMenu == true && item.menuShown == false) 
    { 
        item.menuShown = true; 
        row = inflater.inflate(layoutResourceId_menu, parent, false); 
        holder = new RecordHolder(); 
        holder.button1 = (Button) row.findViewById(R.id.button1); 
        holder.button2 = (Button) row.findViewById(R.id.button2); 
        row.setTag(holder); 
    } 
    
    if(item.showMenu == true && item.menuShown == true) 
    { 
        holder.button1.setText("asdsad"); 
        holder.button2.setText("asdasdd"); 
    } 
    
    if(item.showMenu == false && item.menuShown == true) 
    { 
        row = inflater.inflate(layoutResourceId, parent, false); 
        holder = new RecordHolder(); 
        holder.txtTitle = (TextView) row.findViewById(R.id.item_text); 
        holder.imageItem = (ImageView) row.findViewById(R.id.item_image); 
        row.setTag(holder); 
        holder.txtTitle.setText(item.getTitle()); 
        holder.imageItem.setImageBitmap(item.getImage()); 
    } 
    if(item.showMenu == false && item.menuShown == false) 
    { 
        holder.txtTitle.setText(item.getTitle()); 
        holder.imageItem.setImageBitmap(item.getImage()); 
    } 
    return row; 
    

    }

:

  • 내의 getView() 코드입니다. 내가이 일을 제대로하고 있습니까?

    06-21 17:37:39.735 3308-3308/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.menu_grid_view_page, PID: 3308 
    java.lang.NullPointerException 
         at com.example.menu_grid_view_page.CustomGridViewAdapter.getView(CustomGridViewAdapter.java:91) 
         at android.widget.AbsListView.obtainView(AbsListView.java:2240) 
         at android.widget.GridView.makeAndAddView(GridView.java:1345) 
         at android.widget.GridView.makeRow(GridView.java:345) 
         at android.widget.GridView.fillDown(GridView.java:287) 
         at android.widget.GridView.fillGap(GridView.java:247) 
         at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5136) 
         at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4247) 
         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
         at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
         at android.view.Choreographer.doFrame(Choreographer.java:543) 
         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
         at android.os.Handler.handleCallback(Handler.java:733) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:136) 
         at android.app.ActivityThread.main(ActivityThread.java:5081) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
         at dalvik.system.NativeStart.main(Native Method) 
    
  • +0

    당신이 충돌과 로그 캣 출력을 게시 할 수 있습니까? – michaelcarrano

    +0

    나는 그것을 얻었다! 지금 내 메시지에 새 메시지를 추가하려고합니다. – user2551102

    답변

    0

    당신은 두 개의보기를 팽창 단 하나의 뷰 홀더를 사용하고 있습니다 :

    UPDATE 다음은 로그 캣입니다. row가 null이 아니고 holder.txtTitle이 null 인 경우 상황이 발생할 수 있습니다. 코드의 Instade :

    if (row == null) { 
    .. 
    } else { 
    .. 
    } 
    

    시도 사용 :

    boolean inflated = false; 
    if (row != null) { 
        holder = (RecordHolder) row.getTag(); 
        if (holder.imageItem != null) { 
         inflated = true; 
        } 
    } 
    
    if(!inflated) { 
        row = inflater.inflate(layoutResourceId, parent, false); 
        holder = new RecordHolder(); 
        holder.txtTitle = (TextView) row.findViewById(R.id.item_text); 
        holder.imageItem = (ImageView) row.findViewById(R.id.item_image); 
        row.setTag(holder); 
    } 
    
    +0

    곧 업데이트 예정입니다. – user2551102

    +0

    Kornel, 작동하지 않습니다. 그러나 새로운 일이 일어나고 있습니다 - 1. 나는 물건을 클릭한다. 2.Buttons가 표시됩니다. 3) 나는 가시 영역 밖으로 스크롤한다. 4) 내가 눈에 띄는 지역으로 튈 때. 5) 또한 첫 번째 항목을 클릭하면 즉시 중단됩니다. 겹쳐서 밖으로 나올 수 있을까요? – user2551102