我想在底部导航片段中实现RecyclerView,其中包含带有TextView和ImageView的CardView.我在每张打开新活动的卡上都有一个onClickListener.但我的recyclerview没有显示任何东西,并给出了null点异常Logcat.我不知道我在这里缺少什么.
模型类
class Data {
public int imageId;
public String txt;
Data( int imageId, String text) {
this.imageId = imageId;
this.txt = text;
}
}
Run Code Online (Sandbox Code Playgroud)
RecyclerView适配器
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
List<Data> data ;
Context context;
public RecyclerViewAdapter(Context context, ArrayList<Data>data) {
this.context = context;
this.data = data;
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
public CardView mCardView;
public TextView mTextView;
public ImageView imageView;
public MyViewHolder(View v){
super(v);
mCardView = (CardView) v.findViewById(R.id.cardview1);
mTextView = (TextView) v.findViewById(R.id.tv_text);
imageView = …Run Code Online (Sandbox Code Playgroud) 以下是我使用的代码:
public class PaymentAndReceiptAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
public Context context;
private List<CustomerAndAmount> customerAndAmountList = new ArrayList<>();
private PaymentAndReceiptItemClickListener paymentAndReceiptItemClickListener;
private Map<Long, Double> chartMap;
public PaymentAndReceiptAdapter(final Context context, final List<CustomerAndAmount> customerAndAmountList, final Map<Long, Double> chartMap, final PaymentAndReceiptItemClickListener paymentAndReceiptItemClickListener) {
this.context = context;
setResult(customerAndAmountList, chartMap);
this.paymentAndReceiptItemClickListener = paymentAndReceiptItemClickListener;
}
public void setResult(final List<CustomerAndAmount> customerAndAmountList, final Map<Long, Double> chartMap) {
this.customerAndAmountList.clear();
if (null != customerAndAmountList) {
this.customerAndAmountList.addAll(customerAndAmountList);
}
this.chartMap …Run Code Online (Sandbox Code Playgroud) android recycler-adapter android-recyclerview recyclerview-layout
我的问题id直接与@Richard有关,在RecyclerView.Adapter中关于onBindViewHolder()方法的问题没有被调用,因为他(和我)期望它这样做.
我注意到这个方法被正确调用,直到我的数据集结束(9个CardViews,向下滚动),但是当我尝试返回(向上滚动)时,它不再被调用.真正的问题是,在那里我在数据集中进行了更改并调用了notifyDataSetChanged(),但是由于这种奇怪的(对我来说)行为,我的修改不应该发生.
我附上的图片想要澄清:

我认为这是理查德在他的问题中遇到的完全相同的问题,我尝试了他完全相同的解决方案:我在我的Adapter的构造函数中强制setHasStableIds()为true,
public CardAdapter(List<Object> items){
this.items = items;
adapterList = new ArrayList<String>();
formAdapt = new ConjFormAdapter(adapterList);
itemMap = new HashMap<Object, Long>();
setHasStableIds(true);
}
Run Code Online (Sandbox Code Playgroud)
其中itemMap是我在我的活动中实现的Map,用于设置我的数据集的唯一ID,
并以这种方式覆盖getItemId():
public long getItemId(int position) {
Object item = items.get(position);
return itemMap.get(item);
}
Run Code Online (Sandbox Code Playgroud)
但是你可以从图片中看到我仍然得到这个结果:好吗?
我的活动中itemMap的实现:
for(int i=0, j=0; i<conj_items.size(); i++, j++)
conjAdapter.getItemMap().put(conj_items.get(i), (long) j);
Run Code Online (Sandbox Code Playgroud)
其中conj_items是我传递给适配器的ArrayList.
android android-viewholder android-cardview recycler-adapter android-recyclerview
我RecyclerView在我的程序中使用,面对一些小问题,我相信你们中的一些人已经面对并解决了所有这些问题.
Separator color:使用DividerItemDecoration.java显示Items之间的分隔符,但如果我想更改分隔线颜色(如:默认为白色),则不知道在哪里进行更改
Clickable Row:点击仅在我连续点击文本时有效,但我想允许用户点击此链接后的任何地方(如:listview)
Wrap RecyclerView :我在recyclerview中只有两个记录,但它消耗全高(我想根据RecyclerView中的记录包装它,如:listview)
Ripple Effect:每当我点击RecyclerView中的任何项目时都没有获得RippleEffect,而当我点击列表项目获得Ripple效果时
RecyclerView Item Animation:当我点击RecyclerView中的任何项目时,如何实现动画效果
fragment_main.xml: -
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_rounded"/>
Run Code Online (Sandbox Code Playgroud)
adapter_main.xml: -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textTitle"
style="@style/AppTheme.ListTextView"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
styles.xml: -
<style name="AppTheme.ListTextView" parent="android:Widget.Material.TextView">
<item name="android:gravity">left</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:padding">10dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
btn_rounded.xml: -
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#008f8471"/>
<stroke android:width="2dp" android:color="#ffffff" />
<corners android:radius="10dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
MainAdatper.java:-
@Override
public …Run Code Online (Sandbox Code Playgroud) android android-5.0-lollipop recycler-adapter android-recyclerview
在我RecyclerViewAdapter,我想知道这个项目是否是最后一个.我怎么检查呢?
在onBindViewHolder只有位置值
@Override
public void onBindViewHolder(UserViewHolder userViewHolder, int position) {
//DO SOMETHING TO THE VIEW IF THIS IS THE LAST ITEM IN RECYCLERVIEW
}
Run Code Online (Sandbox Code Playgroud) android android-layout recycler-adapter android-recyclerview recyclerview-layout
我在recyclerView中列出了卡片清单。持卡一段时间后,其在数据库中的对应条目将被删除,因此之后必须将其删除。可以通过调用设置新的更新的适配器来完成。但是我无法在onBindViewHolder中使用setAdapter函数,因为我不知道如何获得相同的recyclerView。请帮忙。
码:
public class RecyclerViewAdapterMain extends RecyclerView.Adapter<RecyclerViewAdapterMain.ViewHolder> {
String[] strings;
DBManager dbManager;
public RecyclerViewAdapterMain(String[] arrayList) {
this.strings = arrayList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_list,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.textView.setText(strings[position]);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(holder.itemView.getContext(),SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("list",strings[position]);
intent.putExtras(bundle);
holder.itemView.getContext().startActivity(intent);
//overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);
}
});
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override …Run Code Online (Sandbox Code Playgroud) 我正在尝试加载列表RecyclerView并将列表的第一行显示为已选中.我使用以下代码实现了它:
@Override
public void onBindViewHolder(NavigationDrawerAdapter.ViewHolder holder, final int position) {
if (!mNavClassrooms.get(position).equals("")) {
holder.mTextViewClassroom.setText(mNavClassrooms.get(position)); // Setting the Text with the array of our Titles
holder.mRelLayClassroom.setSelected(mSelectedItems.get(position, false));
/*
The following code was written to make the first item in the Classroom list as selected.
It leads to the item always being selected and hence has been commented out.
*/
if(position == 0 && intOldSelectedItem == -1){
holder.mRelLayClassroom.setSelected(mSelectedItems.get(position, true));
intOldSelectedItem = 0;
mSelectedView = holder.mRelLayClassroom.getChildAt(position);
mSelectedItems.put(position, true);
}
else{
holder.mRelLayClassroom.setSelected(mSelectedItems.get(position, …Run Code Online (Sandbox Code Playgroud) 我有一个recyclerview,它从SQL数据库中填充数据.现在,recyclerview中的每一行都有一个搜索栏,当移动时,它会在同一行内的文本视图中显示它的进度.问题是当我向上或向下滚动recyclerview然后返回到第一个更改的行时,搜索栏返回到其默认位置.如何保存新职位?在正常的活动/片段中,我使用生命周期方法作为"onPause"来保存/恢复状态.在这里我们有onAttachedToRecyclerView,我认为它应该解决我的问题,但我不确切知道如何.
编辑:这是一个完整的简单的应用程序文件,我正在努力测试这个问题.
MainActivity.class
public class MainActivity extends AppCompatActivity {
private List<Score> scoreList = new ArrayList<>();
private RecyclerView recyclerView;
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mAdapter = new MyAdapter(scoreList);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
prepareScoreData();
}
private void prepareScoreData() {
Score score = new Score("title", 5);
scoreList.add(score);
for(int i= 0; i<1000; i++){
score = new Score("title", 5);
scoreList.add(score);
}
mAdapter.notifyDataSetChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
MyAdapter
public class MyAdapter extends …Run Code Online (Sandbox Code Playgroud) 这是udacity的问题,我无法回答.根据我的学习,这是1,4,5,6,但这是错的.实际问题在这里你可以试试. 题
我遇到了一个问题,当我将数据添加到数组列表然后将其添加到适配器之后,当我将其设置为recycleler视图适配器时,它会自动跳转到顶部我如何能够阻止它,就像我想在虚拟空间中添加数据一样我也尝试过使用 -
runOnUiThread(new Runnable() {
public void run() {
innerAdapter.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我怎么解决呢?
添加一些代码以便向上滚动
if (isScrollUp) {
isEnable = true;
userChats.addAll(0, model.data);
innerChatAdapter.notifyDataSetChanged();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
nnerChatAdapter.notifyItemInserted(0);
recyclerView.smoothScrollToPosition(0);
}
}, 1);
}
Run Code Online (Sandbox Code Playgroud)