相关疑难解决方法(0)

简单的Android RecyclerView示例

我使用Android制作了几次项目列表RecyclerView,但这是一个相当复杂的过程.通过众多教程中的一个在线工作(这个,这个,很好),但我正在寻找一个简单的例子,我可以复制和粘贴以快速启动和运行.只需要以下功能:

  • 垂直布局
  • 每行一个TextView
  • 响应点击事件

因为我多次希望这样,所以我最终决定在下面给出答案以供我将来参考和你的.

android android-recyclerview

133
推荐指数
6
解决办法
15万
查看次数

Android RecyclerView添加和删除项目

我有一个带有TextView文本框和十字按钮ImageView的RecyclerView.我在recyclerview外面有一个按钮,使十字按钮ImageView可见/消失.

我正在寻找从recylerview中删除项目,当按下该项目交叉按钮ImageView时.

我的适配器:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener {

    private ArrayList<String> mDataset;
    private static Context sContext;

    public MyAdapter(Context context, ArrayList<String> myDataset) {
        mDataset = myDataset;
        sContext = context;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false);

        ViewHolder holder = new ViewHolder(v);
        holder.mNameTextView.setOnClickListener(MyAdapter.this);
        holder.mNameTextView.setOnLongClickListener(MyAdapter.this);

        holder.mNameTextView.setTag(holder);

        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        holder.mNameTextView.setText(mDataset.get(position));

    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }


    @Override
    public void onClick(View view) { …
Run Code Online (Sandbox Code Playgroud)

java user-interface android selection android-recyclerview

127
推荐指数
6
解决办法
21万
查看次数

如何在RecyclerView中更新/刷新特定项目

我正在尝试刷新特定项目RecyclerView.

故事:每当用户点击项目时,它都会显示AlertDialog.用户可以通过单击确定按钮键入一些文本.我想在这个项目中显示这个文本并显示不可见ImageView- 在XML和适配器中声明ViewHolder-

我在AlertDialogPositive Button中使用此函数来更新项目:

private void updateListItem(int position) {
  View view = layoutManager.findViewByPosition(position);
  ImageView medicineSelected = (ImageView) view.findViewById(R.id.medicine_selected);
  medicineSelected.setVisibility(View.VISIBLE);
  TextView orderQuantity = (TextView) view.findViewById(R.id.order_quantity);
  orderQuantity.setVisibility(View.VISIBLE);
  orderQuantity.setText(quantity + " packet added!");

  medicinesArrayAdapter.notifyItemChanged(position);
}
Run Code Online (Sandbox Code Playgroud)

但是这段代码不仅改变了传递位置的itemView,还改变了其他一些itemView(s)!

如何通过单击更改特定的itemView?

android android-adapter recycler-adapter android-recyclerview

96
推荐指数
5
解决办法
15万
查看次数

使用RecyclerView适配器更新数据的最佳方法

当我必须使用带有ListView的经典适配器时,我在ListView中更新我的数据,如下所示:

myAdapter.swapArray(data);

public swapArray(List<Data> data) {
  clear();
  addAll(data);
  notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

我想知道RecyclerView的最佳实践是什么.因为在RecyclerView适配器,你不能做clear,并addAllListView控件.

所以我尝试了一下notifyDataSetChanged,但它没有用.然后我尝试在我的视图上使用swapAdapter:

List<Data> data = newData;

MyRecyclerAdapter adapter = new MyRecyclerAdapter(data);

// swapAdapter on my recyclerView (instead of a .setAdapter like with a classic listView).
recyclerViewList.swapAdapter(adapter, false);
Run Code Online (Sandbox Code Playgroud)

但是使用这个最后的解决方案,我仍然需要创建我的适配器的新实例,我觉得它不是最好的解决方案.我应该能够在没有新的情况下更改我的数据MyRecyclerAdapter.

android listview android-adapter android-recyclerview

73
推荐指数
4
解决办法
10万
查看次数

如何在RecyclerView中实现setOnScrollListener

当用户到达列表中可见的项目时,如何在底部显示进度条.

我编写了一个代码,我使用Web服务获取数据,现在我想填充部分记录,因为我的JSON中有大约630条记录.

这是我用来从JSON获取数据并填充到RecyclerView中的整个代码.

以下是我的JSON外观,但真正的JSON包含600多条记录:

 http://walldroidhd.com/api.php
Run Code Online (Sandbox Code Playgroud)

有人可以指导我在我的代码中进行更改吗?

我希望每当用户使用进度条滚动到底部时填充更多记录,我仍然显示所有记录.

RecyclerViewFragment.java:

public class RecyclerViewFragment extends Fragment {

    RecyclerView mRecyclerView;
    LinearLayoutManager mLayoutManager;
    RecyclerView.Adapter mAdapter;
    ArrayList<NatureItem> actorsList;

    private int previousTotal = 0;
    private boolean loading = true;
    private int visibleThreshold = 5;
    int firstVisibleItem, visibleItemCount, totalItemCount;

    public static RecyclerViewFragment newInstance() {
        return new RecyclerViewFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_recyclerview_advance, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        actorsList = new …
Run Code Online (Sandbox Code Playgroud)

java onscrolllistener endlessscroll android-cardview android-recyclerview

35
推荐指数
4
解决办法
6万
查看次数

为什么片段中的getContext()有时会返回null?

为何getContext()有时会回归null?我将上下文LastNewsRVAdapter.java作为参数传递.但LayoutInflater.from(context)有时会崩溃.我在游戏机上收到一些崩溃报告.以下是崩溃报告.

java.lang.NullPointerException
com.example.adapters.LastNewsRVAdapter.<init>

java.lang.NullPointerException: 
at android.view.LayoutInflater.from (LayoutInflater.java:211)
at com.example.adapters.LastNewsRVAdapter.<init> (LastNewsRVAdapter.java)
at com.example.fragments.MainFragment$2.onFailure (MainFragment.java)
or                     .onResponse (MainFragment.java)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run 
(ExecutorCallAdapterFactory.java)
at android.os.Handler.handleCallback (Handler.java:808)
at android.os.Handler.dispatchMessage (Handler.java:103)
at android.os.Looper.loop (Looper.java:193)
at android.app.ActivityThread.main (ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative (Method.java)
at java.lang.reflect.Method.invoke (Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:641)
at dalvik.system.NativeStart.main (NativeStart.java)
Run Code Online (Sandbox Code Playgroud)

这是LastNewsRVAdapter.java构造函数.

public LastNewsRVAdapter(Context context, List<LatestNewsData> 
    latestNewsDataList, FirstPageSideBanner sideBanner) {
    this.context = context;
    this.latestNewsDataList = latestNewsDataList;
    inflater = LayoutInflater.from(context);
    this.sideBanner = sideBanner;
}
Run Code Online (Sandbox Code Playgroud)

这是onCreateView …

android android-fragments fragment-lifecycle

28
推荐指数
2
解决办法
2万
查看次数

从sqlite删除项目后,RecyclerView不会更新?

我已经从sqlite填充了recyclerview.当点击每一行时,行将从sqlite中删除,但recyclelerview在删除后没有显示更新列表.Recycler视图仅在再次启动活动后显示更新列表.我的问题是如何在不刷新的情况下从recylcerview中删除项目后立即更新回收站视图.

以下是我的代码

SecondActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class SecondActivity extends AppCompatActivity {
    DatabaseHelpher helpher;
    List<DatabaseModel> dbList;
RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        helpher = new DatabaseHelpher(this);
        dbList= new ArrayList<DatabaseModel>();
        dbList = helpher.getDataFromDB();


        mRecyclerView = (RecyclerView)findViewById(R.id.recycleview);

        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // …
Run Code Online (Sandbox Code Playgroud)

sqlite android listview android-recyclerview

6
推荐指数
2
解决办法
2万
查看次数

NestedScrollview 中的 RecyclerView 替代方案

我有一个具有这种层次结构的布局

< NestedScrollView fillViewPort=true>
< LinearLayout>
< Viewgroup/>
< ViewGroup/>
< RecyclerView/>
< ViewGroup/>
</LinearLayout>
</NestedScrollView>

有时我需要更新我的 recyclerview 元素,但它会冻结主线程。我的猜测是因为滚动视图需要再次测量它。我真的很想知道我应该怎么做?

  • 用 layoutinlfate 替换回收器视图?
  • 高度固定的 Recyclerview?
  • 用recyclview替换nestedscrollview?将在 reclyerview 中有 recyclview。这行得通吗?

android android-recyclerview

6
推荐指数
1
解决办法
3154
查看次数

删除项目后,RecyclerView不会更新

RecyclerView在片段底部有一个水平图像滑块.片段的顶部显示了一些细节.一旦用户点击底部的图像,想法是从图像滑块中删除该图像并在片段中显示其信息.现在信息显示但图像不会被删除RecyclerView.这是我Onclick在最外层布局中编码的内容.我已经尝试了所有可以找到的相关答案,但没有任何效果.它们都在代码中.请让我知道我做错了什么或错过了什么.

holder.itemRowRelativeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (isFiltering) {
                mItemList.clear();
                mItemList.addAll(mOriginalItemList);
                mItemList.remove(position);// At this point mItemList holds the correct. That is all the images but not the one that was clicked. 

                notifyItemRemoved(position); //solution 1
                notifyItemRangeRemoved(position, getItemCount()); // solution 2
                notifyItemRangeRemoved(0, getItemCount()); // solution 3
                notifyDataSetChanged();//solution 4
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

适配器的完整代码

public class ImageGallery16X9Adapter<T extends GalleryItem> extends RecyclerView.Adapter<ImageGallery16X9Adapter.GalleryItemViewHolder> {

public enum GalleryMode {
    All_SAME,
    FIRST_DIFFERENT
}

private Context mContext;
private BasePresenter …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-fragments recycler-adapter android-recyclerview

5
推荐指数
1
解决办法
8552
查看次数

活动/片段中的警报对话框确认后,如何在单击时更新RecyclerView按钮状态?

我有一个非常独特的情况,我在recyclerview中有一个按钮,单击该按钮(初始状态为“ register”)后,会将其意图传递给片段或活动中的广播接收器,并在其中引发警报对话框,带有2个选项,是的或者没有。如果选择否,则什么也不会发生,并且对话框会消失,但是如果单击是,它将处理我在我的演示者类中定义的函数(与数据有关),并且应该将我的按钮ui状态更新为“取消”。其他方法也一样,单击“取消”将返回警报,单击“是”将切换ui文本进行注册。

现在我已经实现了如下代码(请注意,即使notifydatasetchanged对我也不起作用)。知道我做错了什么以及如何实现吗?我public void onBind(int position)的适配器功能代码:

if (repo.getIsRsvpAvailable().equals("true")) {
    rsvpButton.setVisibility(View.VISIBLE);
    for (int i = 0; i < mAllRSVPEventsList.size(); i++) {
        if (mAllRSVPEventsList.get(i).getEvent().getEventId().equals(repo.getEventId()) && mAllRSVPEventsList.get(i).getIsAttending()) {
            rsvpButton.setText("CANCEL");
            rsvpButton.setOnClickListener(v -> {
                Intent in = new Intent("main_rsvp_button_clicked");
                in.putExtra("main_rsvp_event_id", repo.getEventId());
                in.putExtra("main_rsvp_is_attending", "false");
                in.putExtra("main_rsvp_item_position", position);
                rsvpButton.getContext().sendBroadcast(in);
            });
            break;
        } else {
            rsvpButton.setText("RSVP");
            rsvpButton.setOnClickListener(v -> {
                Intent in = new Intent("main_rsvp_button_clicked");
                in.putExtra("main_rsvp_event_id", repo.getEventId());
                in.putExtra("main_rsvp_is_attending", "true");
                in.putExtra("main_rsvp_item_position", position);

                rsvpButton.getContext().sendBroadcast(in);
            });
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的活动中广播接收器中的相应代码:

private BroadcastReceiver mEventIdReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context …
Run Code Online (Sandbox Code Playgroud)

java android broadcastreceiver recycler-adapter android-recyclerview

5
推荐指数
0
解决办法
282
查看次数

Recycler 和 CardView:在空对象引用上调用虚拟方法“void android.view.View.unFocus(android.view.View)”

我有一个 cardView 适配器,它允许我显示我的数据库中的数据。我刚刚实现了滑动删除,但有时会出现此错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.unFocus(android.view.View)' on a null object reference
Run Code Online (Sandbox Code Playgroud)

指向mRecyclerView.removeViewAt (viewHolder.getAdapterPosition ());我 Activity 中的这行代码

我不明白为什么我会出现这个错误,尤其是有时它工作得很好,但有时却不是......

我的活动

public class Resume_game_new extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    List<Game> mDataset;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resume_game_new);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view_resume_game);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout …
Run Code Online (Sandbox Code Playgroud)

android

2
推荐指数
1
解决办法
3868
查看次数

删除行后更新 Recyclerview 列表

我已经尝试了该网站的大多数答案,但没有得到所需的结果。

我有 recyclerview,其中包含项目列表和每行中包含的按钮。单击该按钮时,我希望删除整行并自动更新列表。

这是我的适配器类代码:

public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {

private static final String TAG = CartAdapter.class.getSimpleName();

private final Context context;
private List<Cart> itemsList;
private String id;

public CartAdapter(Context context, List<Cart> itemsList) {
    this.context = context;
    this.itemsList = itemsList;
}

@Override
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_items_layout, parent, false);
    return new CartViewHolder(view);
}

@Override
public void onBindViewHolder(final CartViewHolder viewholder, final int position) {
    final Cart cart = itemsList.get(position);
    id = cart.getProductId();

    AndroidNetworking.get(Constants.PRODUCT_DETAILS_ENDPOINT + id)
            .setTag("Get …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

0
推荐指数
1
解决办法
4787
查看次数