2016-09-15 2 views
0

이 그림과 같이 I 행의 나머지 부분과 달라야합니다 첫 번째 행의 RecyclerView 레이아웃 사용자 정의 RecyclerView를 구축하기 위해 노력하고있어이RecyclerView가 예기치 않게 동작

custom recyclerview

내가 검색과 발견했습니다 일부 자원은 012 MainActivity

public class PostDetailAdapter extends RecyclerView.Adapter<ViewHolder> { 

    private static final String TAG = PostDetailAdapter.class.getName(); 

    private List<Solution> mSolutionList; 
    private Issue mIssue; 

    private Context mContext; 
    public static final int ISSUE = 0; 

    public PostDetailAdapter(Context mContext, Issue mIssue, List<Solution> mSolutionList){ 
     this.mContext = mContext; 
     this.mIssue = mIssue; 
     this.mSolutionList = mSolutionList; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     View v; 
     try { 
      if (viewType == ISSUE) { 
       v = LayoutInflater.from(viewGroup.getContext()) 
         .inflate(R.layout.row_detail_issue, viewGroup, false); 
       return new PostDetailViewHolder(v); 
      } else { 
       v = LayoutInflater.from(viewGroup.getContext()) 
         .inflate(R.layout.row_detail_solution, viewGroup, false); 
       return new AnswerDetailViewHolder(v); 
      } 
     }catch (Exception e){ 
      Toast.makeText(mContext, "Error caused by " + e.getCause(), Toast.LENGTH_SHORT).show(); 
      Log.e(TAG, "Error caused by " + e.getCause()); 
      return null; 
     } 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int position) { 
     try { 
      if (viewHolder.getItemViewType() == ISSUE) { 
       PostDetailViewHolder postDetailViewHolder = (PostDetailViewHolder) viewHolder; 
       postDetailViewHolder.setTitleText(mIssue.getQ()); 
       postDetailViewHolder.setDescText(mIssue.getD()); 
      } else { 
       AnswerDetailViewHolder answerDetailViewHolder = (AnswerDetailViewHolder) viewHolder; 
       answerDetailViewHolder.setDescText(mSolutionList.get(position).getD()); 
      } 
     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (position == 0) {     
      return 0; 
     } else{     
      return 1; 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return (null != mSolutionList) ? mSolutionList.size() : 0/0;    

    } 

} 

RecyclerView에 대한 사용자 정의 어댑터에 대한 솔루션을 가지고 이 시점에서 31,

미리 채워진이 잘 작동 List<Soultion>을 예상대로하지만 난 변경했습니다 어댑터

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mCount +=1; 
      Solution solution = new Solution("Solution " + mCount); 
      mSolutionList.add(solution); 
      mAdapter.notifyDataSetChanged(); 
      Log.e("MAIN_ACTIVITY", "Click return..." + mCount); 
     } 
    }); 

로 클릭 populateSolutionList()를 제거를 통해 할 Solution를 추가 할 때

@Override 
    public int getItemCount() { 
     try { 
      if (!mSolutionList.isEmpty()){ 
       int i = (null != mSolutionList) ? mSolutionList.size() : 0/0; 
       return (i); 
      }else { 
       return 1; 
      } 
     }catch (Exception e){ 
      return 0; 
     } 

    } 

첫 번째 솔루션 행을 클릭했을 때 추가되었지만 RecyclerView에 표시되지 않은 경우 다른 모든 어댑터가 나와있는 것으로 나타났습니다. 어댑터 문제가 있음을 알았습니다. getItemCount() 아무튼 나에게 어떻게 제안 할 수 있습니까? s

+0

이 보이는'(널 (null) = mSolutionList!)? mSolutionList.size() + 1 : 1' –

답변

0

목록의 첫 번째 행 (문제)을 고려해야하며 추가 한 솔루션은 두 번째 행에서 추가됩니다. 아이템 수는 항상 +1이어야합니다. 당신이 _issue_ 항목에 대한 1 'itemCount`를 늘려야 같은

따라서, getItemCount()가 반환해야 mSolutionList.size() + 1

관련 문제