我有一个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
我有 3 种不同的布局cardsListLayout,titleLayout,cardMagazineLayout将来可能会有更多,用作方法的视图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
下面是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
我一直试图让一个非常基本的应用程序去玩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
如何从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
我有一个片段,我想在其中包含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
我正在尝试使用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
我正在尝试在自定义适配器中使用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) 我有一个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并默默地捕获此错误的解决方法,但这是一个糟糕的解决方案,我相信这里应该更好.
有人可以提供任何帮助吗?
我已经使用了RececlerView与ViewHolder现在一会儿模式.我正在实施一个自定义Adapter.
我不是在我的代码中搜索特定的错误帮助.
我只是想知道,如果这是正常的,该onBindViewHolder方法被多次调用(对于相同的项目),同时滚动到列表的末尾并向上滚动.在这种情况下onBindViewHolder,再次调用项目0和1(该列表总共包含7个项目)
是否有可能在不通知数据已更改的情况下将此方法调用为AGAIN?
我有点困惑.
亲切的问候,Palm
android listview android-viewholder recycler-adapter android-recyclerview