Skip to content

Commit

Permalink
修复了头部不能设置高度、添加底部后删除最后一个item会崩溃的bug
Browse files Browse the repository at this point in the history
  • Loading branch information
kale committed May 7, 2016
1 parent 574f905 commit 4df9e4d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 11 deletions.
10 changes: 9 additions & 1 deletion adapter/src/main/java/kale/adapter/RcvAdapterWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ public void onItemRangeInserted(int positionStart, int itemCount) {
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
notifyItemRangeRemoved(positionStart + getHeaderCount(), itemCount);
if (getFooterCount() != 0) {
if (positionStart + getFooterCount() + 1 == getItemCount()) { // last one
notifyDataSetChanged();
}
}
}

@Override
Expand Down Expand Up @@ -176,9 +181,12 @@ private static class SimpleViewHolder extends RecyclerView.ViewHolder {

public SimpleViewHolder(View itemView) {
super(itemView);
final int itemHeight = itemView.getLayoutParams() != null ?
itemView.getLayoutParams().height : ViewGroup.LayoutParams.WRAP_CONTENT;

itemView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
itemHeight
));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Toast;

import kale.adapter.CommonRcvAdapter;
import kale.adapter.RcvAdapterWrapper;
Expand Down Expand Up @@ -43,7 +45,7 @@ protected void onCreate(Bundle savedInstanceState) {
recyclerView.setLayoutManager(layoutManager1);

data.addAll(DataManager.loadData(getBaseContext()));

CommonRcvAdapter<DemoModel> adapter = new CommonRcvAdapter<DemoModel>(data) {
@Override
public Object getItemType(DemoModel demoModel) {
Expand All @@ -67,23 +69,27 @@ public AdapterItem createItem(Object type) {
};

final RcvAdapterWrapper wrapper = new RcvAdapterWrapper(adapter, layoutManager1);

Button header = new Button(this);
header.setText("Header");

header.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300));

Button footer = new Button(this);
footer.setText("footer");

wrapper.setHeaderView(header);
wrapper.setFooterView(footer);

recyclerView.setAdapter(wrapper);

// 建议把点击事件写入item里面,在外面写会有各种各样的不可控的问题。这里仅仅是给出一个实现方案,但是不推荐使用
recyclerView.addOnItemTouchListener(new RcvOnItemClickListener(this, new AdapterView.OnItemClickListener() {
@Deprecated
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
position = position - wrapper.getHeaderCount();
position = position - wrapper.getHeaderCount(); // 写在外面就得判断是否有头部和底部,还不能集中控制事件
if (position >= 0) {
Toast.makeText(RcvHeaderFooterTestActivity.this, "pos = " + position, Toast.LENGTH_SHORT).show();
data.remove(position);
}
}
Expand Down Expand Up @@ -116,6 +122,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
}
}
6 changes: 3 additions & 3 deletions app/src/main/java/kale/commonadapter/RcvTestActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,10 @@ public AdapterItem createItem(Object type) {
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//添加菜单项
MenuItem add = menu.add(0, 0, 0, "change");
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
MenuItem change = menu.add(0, 0, 0, "change");
change.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
Expand Down

0 comments on commit 4df9e4d

Please sign in to comment.