标签: android-viewholder

RecyclerView:指定的子级已有父级.您必须首先在孩子的父母上调用removeView()

我有一个RecyclerView我在下面得到例外的地方.我只是在Crashlytics上获得了例外,尽管我每天都在大量使用这项活动,但我自己从未设法重现这个问题.

我夸大其观点的方式onCreateViewHolder是:

View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item, parent, false);
Run Code Online (Sandbox Code Playgroud)

还有另一种视图类型,它来自MoPub原生广告.

知道问题是什么吗?

Caused by java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the childs parent first.
           at android.view.ViewGroup.addViewInner(ViewGroup.java:4438)
           at android.view.ViewGroup.addView(ViewGroup.java:4274)
           at android.view.ViewGroup.addView(ViewGroup.java:4215)
           at android.support.v7.widget.RecyclerView$5.addView(RecyclerView.java:711)
           at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107)
           at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:7877)
           at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7835)
           at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:7823)
           at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1565)
           at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
           at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1325)
           at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1061)
           at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:4726)
           at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894)
           at android.view.Choreographer.doCallbacks(Choreographer.java:696)
           at android.view.Choreographer.doFrame(Choreographer.java:628)
           at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880)
           at android.os.Handler.handleCallback(Handler.java:815)
           at android.os.Handler.dispatchMessage(Handler.java:104)
           at android.os.Looper.loop(Looper.java:207)
           at android.app.ActivityThread.main(ActivityThread.java:5728)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) …
Run Code Online (Sandbox Code Playgroud)

android android-viewholder recycler-adapter android-recyclerview

6
推荐指数
0
解决办法
1211
查看次数

单击 AlertDialog 项目列表时,在 RecyclerView 布局之间切换

我有 3 种不同的布局cardsListLayouttitleLayoutcardMagazineLayout将来可能会有更多,用作方法的视图onCreateViewHolder

我想在onCreateViewHolder方法中的视图之间切换,所以当用户从 AlertDialog 列表中选择时

这个 onOptionsItemSelected 在 MainActivity 那里有菜单项“更改布局”,以便当用户按下它时出现 AlertDialog 列表

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.change_layout) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(getString(R.string.choose_layout));

            String[] layouts = {"Title Layout", "Cards List", "Card Magazine Layout"};
            builder.setItems(layouts, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int index) {
                    switch (index) {
                        case 0: // Title layout
                            Toast.makeText(MainActivity.this,
                                    "Title layout", Toast.LENGTH_LONG).show();
                            break;
                        case 1: // Cards List …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-viewholder android-recyclerview recyclerview-layout

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

使用数据绑定后查看边距不起作用

下面是gridview的item布局的代码。在此, layout_margin 在设计面板中,但是当我运行时没有边距。我试图检查其他标签,如背景,发现它正在工作。一个类似的问题是 linear_layout 的 layout_weights,它们也不起作用。这些在没有数据绑定的情况下工作正常。有人可以帮我解决这个问题吗?'''

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="localEntry"
            type="com.example.lo_cal.data.models.LoCalEntry" />
    </data>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/small"
        android:background="@color/colorAccent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/item_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:itemId="@{localEntry}"
            tools:text="ID" />

        <TextView
            android:id="@+id/item_first_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{localEntry.firstName}"
            tools:text="shashank" />

        <TextView
            android:id="@+id/item_second_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{localEntry.secondName}"
            tools:text="mohabia" />

        <TextView
            android:id="@+id/item_result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{localEntry.result}"
            tools:text="100" />
    </androidx.appcompat.widget.LinearLayoutCompat>
</layout>
Run Code Online (Sandbox Code Playgroud)

'''

data-binding android kotlin android-viewholder android-recyclerview

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

CardView中的Google Map Lite

我一直试图让一个非常基本的应用程序去玩Material Design.我正在尝试创建一个Listview(使用新的RecyclerView),每个项目都是一个卡片女巫有一个谷歌地图精简版.

我基本上都遵循这个例子:创建列表和卡片,对于Google Maps实现我一直在使用这个例子

当我在适配器中只有一个项目时(因为只有一个项目可以显示),当我向适配器添加第二个项目时(因此列表中应该有两个项目),应用程序崩溃了例外:

  21158-21158/lollipop.auxilium.nl.lollipoptest E/AndroidRuntime? FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #21: Error inflating class fragment
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
        at lollipop.auxilium.nl.lollipoptest.MyAdapter.onCreateViewHolder(MyAdapter.java:63)
        at lollipop.auxilium.nl.lollipoptest.MyAdapter.onCreateViewHolder(MyAdapter.java:25)
        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:523)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
        at android.view.View.layout(View.java:15204)
        at android.view.ViewGroup.layout(ViewGroup.java:4793)
        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
        at android.view.View.layout(View.java:15204)
        at android.view.ViewGroup.layout(ViewGroup.java:4793)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
        at android.view.View.layout(View.java:15204)
        at android.view.ViewGroup.layout(ViewGroup.java:4793)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
        at android.view.View.layout(View.java:15204)
        at android.view.ViewGroup.layout(ViewGroup.java:4793)
        at …
Run Code Online (Sandbox Code Playgroud)

android google-maps google-play-services android-viewholder android-recyclerview

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

Android Google在RecyclerView.ViewHolder中映射片段

如何从RecyclerView.ViewHolder访问GoogleMap

我有:

public class MapRowHolder extends RecyclerView.ViewHolder
{
 public MapRowHolder(View view) {
        super(view);
 }
}
Run Code Online (Sandbox Code Playgroud)

XML:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android.support.v7.cardview="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android.support.v7.cardview:cardBackgroundColor="@color/blue"
android.support.v7.cardview:cardCornerRadius="@dimen/card_corner"
android.support.v7.cardview:cardElevation="@dimen/card_elevation">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_gravity="right|center_vertical"
    android:gravity="center_vertical|right"
    android:layout_width="fill_parent">


    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:tag="maps"

        android:id="@+id/map_view_fragment" tools:context=".Map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_centerInParent="true"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

适配器:

public class MapAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{


 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        RecyclerView.ViewHolder mh;


        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.map_row, viewGroup, false);
        mh = (RecyclerView.ViewHolder)new PodatkiZaMapRowHolder(v);

        return mh;
    }

 public void onBindViewHolder(RecyclerView.ViewHolder RowHolder, int polozaj) {

        MapRowHolder …
Run Code Online (Sandbox Code Playgroud)

android google-maps android-adapter android-fragments android-viewholder

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

片段中的Recyclerview不会显示任何内容

我有一个片段,我想在其中包含recyclerview.但遗憾的是它没有显示任何内容,似乎查看器方法没有开始.(对不起,我的英语不好).这是片段的代码:

public class Quran_Fragment extends Fragment {

    public static final String ARG_SCROLL_Y = "ARG_SCROLL_Y";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.fragment_scrollview_quran, container, false);

      // Ab hier neu: Basem @ BMW

      RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);

      // Die Klasse ItemData_quran kann ja gleich bleiben für alle Fragments !! nur itemsData heisst dann anders....
      // Die Adapter, welche die verbindung zwischen Daten und Darstellung sind, werden fuer alle Fragments neu erzeugt: Quran_Fragment ->QuranAdapter, Translation_Fragment ->TranslationAdapter …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-scrollview android-viewholder android-recyclerview

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

如何使用RecyclerView,尝试遵循developer.android.com建议,但得到错误

我正在尝试使用RecyclerView来显示我的数据集,尝试关注此网站 https://developer.android.com/training/material/lists-cards.html

问题是有一些部分是错误的,无法找到如何解决它,我确切地说该网站的建议.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = …
Run Code Online (Sandbox Code Playgroud)

android android-adapter layout-inflater android-viewholder android-recyclerview

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

自定义适配器中的黄油刀视图持有人模式

我正在尝试在自定义适配器中使用Butter Knife,如文档广告:http://jakewharton.github.io/butterknife/ 我粘贴了示例代码并使用我的RelativeLayout文件插入布局:

  @Override public View getView(int position, View view, ViewGroup parent) {
    ViewHolder holder;
    ButterKnife.setDebug(true);
    if (view != null) {
      holder = (ViewHolder) view.getTag();
    } else {
      view = inflater.inflate(R.layout.list_row_people, parent, false);
      holder = new ViewHolder(view);
      view.setTag(holder);
    }

    holder.name.setText("John Doe");
    // etc...

    return view;
  }
Run Code Online (Sandbox Code Playgroud)

这是ViewHolder的代码(内联类PeopleAdapter):

static class ViewHolder {
    @BindView(R.id.name)
    TextView name;

    public ViewHolder(View view) {
        ButterKnife.bind(this, view);
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,holder.name.setText("John Doe");抛出NullPointer异常为namenull.调试输出显示以下行:

13:11:32.816 11613-11613/com.myproject.debug D/ButterKnife: Looking up …
Run Code Online (Sandbox Code Playgroud)

android butterknife android-viewholder

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

DiffResult调度导致"检测到不一致".有时,视图持有者适配器positionViewHolder错误无效

我有一个RxJava2 Observable,它接受两个列表,为它们计算diff结果并将此数据发送到适配器.主线程上的适配器分派更新.

适配器中的调度代码:

 public void dispatchStreams(List<StreamV3> streams, @Nullable DiffUtil.DiffResult diffResult) {

    if (streams == null) return;

    streamsList.clear();
    streamsList.addAll(streams);

    if (diffResult != null) {
        diffResult.dispatchUpdatesTo(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

我检测到了"不一致".某些设备上的某些时候视图持有者适配器positionViewHolder错误无效.我无法弄清楚我的代码有什么问题.Min SDK 21,Target SDK 26,RecyclerView版本为26.0.0.我知道扩展LinearLayoutManager并默默地捕获此错误的解决方法,但这是一个糟糕的解决方案,我相信这里应该更好.

有人可以提供任何帮助吗?

android adapter android-viewholder android-recyclerview

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

RecyclerView onBindViewHolder为一个项目多次调用

我已经使用了RececlerViewViewHolder现在一会儿模式.我正在实施一个自定义Adapter.

我不是在我的代码中搜索特定的错误帮助.

我只是想知道,如果这是正常的,该onBindViewHolder方法被多次调用(对于相同的项目),同时滚动到列表的末尾并向上滚动.在这种情况下onBindViewHolder,再次调用项目0和1(该列表总共包含7个项目)

是否有可能在不通知数据已更改的情况下将此方法调用为AGAIN?

我有点困惑.

亲切的问候,Palm

android listview android-viewholder recycler-adapter android-recyclerview

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