简体   繁体   English

未在“主要活动回收者”视图上设置行布局

[英]row layout not set on on Main Activity Recycler View

I am just parse some data and display on my ListProperty Class. 我只是解析一些数据并显示在ListProperty类上。 I am using RecyclerView and CardView as a row layout. 我使用RecyclerViewCardView作为行布局。 Somehow all is working fine i don't see any error in verbose. 不知何故一切正常,我看不到任何错误。 But the Data and row layout dosent display in my main activity. 但是数据和行布局显示在我的主要活动中。 Activity is showing blank. 活动显示为空白。 I am trying from hours but kind find the error. 我正在尝试从几个小时开始,但是请善良地找到错误。 Please someone help 请有人帮忙

My MainActivity.xml 我的MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/cardList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

This is row.xml 这是row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <ImageView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:id="@+id/imageViewFront" />
            </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_marginLeft="100dp"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:text="New Text"
            android:textColor="#0055CC"
            android:id="@+id/textViewPropertyname" />

        <TextView
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:textColor="#0055CC"
            android:layout_columnWeight="1"
            android:id="@+id/textViewPropertyDescription"/>
    </LinearLayout>

    </android.support.v7.widget.CardView>


</LinearLayout>

This is myAdapter.java 这是myAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
List<Bean> DataList;
public MyAdapter(List<Bean> List){
    super();
    DataList = List;
}
public class MyViewHolder extends RecyclerView.ViewHolder {
    // each data item is just a string in this case
    public TextView propertyName;
    public TextView propertyDesc;
    public ImageView ImageFront;
    public MyViewHolder(View v) {
        super(v);
        propertyName = (TextView) v.findViewById(R.id.textViewPropertyname);
        propertyDesc = (TextView) v.findViewById(R.id.textViewPropertyDescription);
        ImageFront  = (ImageView) v.findViewById(R.id.imageViewFront);
    }
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.from(parent.getContext()).
            inflate(R.layout.list_card_view,parent,false);
    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
    Bean bean = DataList.get(position);
    holder.propertyName.setText(bean.getPropertyName());
    holder.propertyDesc.setText(bean.getPropertyDescription());
    holder.ImageFront.setImageResource(R.drawable.agriculture);

}

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

}

And this is my MainActivity.java 这是我的MainActivity.java

    public class ListProperty extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private MyAdapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    Bean bean;
    AQuery aQuery;
    JSONObject jsonObject;
    List<Bean> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_property);
        aQuery= new AQuery(getApplicationContext());
        String URL = "http://192.168.0.107/propertyapp/service/simpleservice.php";
        list = new ArrayList<Bean>();
        mRecyclerView = (RecyclerView) findViewById(R.id.cardList);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mAdapter = new MyAdapter(list);
        mRecyclerView.setAdapter(mAdapter);
        aQuery.ajax(URL, JSONObject.class,new AjaxCallback<JSONObject>(){
            @Override
            public void callback(String url, JSONObject object, AjaxStatus status) {

                try {
                    bean = new Bean();
                    list = new ArrayList<Bean>();
                    String string = object.getString("data");
                    JSONArray jsonArray = new JSONArray(string);
                    for (int i=0;i<jsonArray.length();i++) {
                        jsonObject = jsonArray.getJSONObject(i);
                        bean.setPropertyName("property_name");
                        bean.setPropertyDescription("property_desc");
                        list.add(bean);
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
        });
    }
}

Try to remove parent LinearLayout. 尝试删除父级LinearLayout。 Because you have CardView which is acting as list item. 因为您有CardView充当列表项。

Try this row.xml - 试试这个row.xml-

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">

            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >

                <ImageView
                    android:layout_width="100dp"
                    android:layout_height="100dp"
                    android:id="@+id/imageViewFront" />
                </LinearLayout>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_marginLeft="100dp"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"
                android:text="New Text"
                android:textColor="#0055CC"
                android:id="@+id/textViewPropertyname" />

            <TextView
                android:layout_marginTop="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="New Text"
                android:textColor="#0055CC"
                android:layout_columnWeight="1"
                android:id="@+id/textViewPropertyDescription"/>
        </LinearLayout>

 </android.support.v7.widget.CardView>

Hope it will help :) 希望它会有所帮助:)

Just add notifyDataSetChanged() to your Activity as below: 只需将notifyDataSetChanged()添加到您的Activity ,如下所示:

    aQuery.ajax(URL, JSONObject.class,new AjaxCallback<JSONObject>(){
        @Override
        public void callback(String url, JSONObject object, AjaxStatus status) {

            try {
                bean = new Bean();
                list = new ArrayList<Bean>();
                String string = object.getString("data");
                JSONArray jsonArray = new JSONArray(string);
                for (int i=0;i<jsonArray.length();i++) {
                    jsonObject = jsonArray.getJSONObject(i);
                    bean.setPropertyName("property_name");
                    bean.setPropertyDescription("property_desc");
                    list.add(bean);
                }
                //here notify your adapter
                //is to Notify any registered observers that the data set has changed.
                mAdapter.notifyDataSetChanged();

               } catch (JSONException e) {
                  e.printStackTrace();
               }


           }
       });

Because on your callback you have created new instance of list 因为您在回调中创建了list的新实例

list = new ArrayList<Bean>();

then in fact, the new created list and DataList in your adapter are pointing to 2 difference objects => calling notifyDataSetChanged here won't work. 那么实际上,适配器中新创建的列表和DataList都指向2个不同的对象=>在此处调用notifyDataSetChanged无效。 Try writing method updateData on MyAdapter and call it from your callback method 尝试在MyAdapter上编写方法updateData并从您的回调方法中调用它

public void updateData(List<Bean> List){
   DataList = List;
   notifyDataSetChanged();
   }

On your callback: 在您的回调中:

aQuery.ajax(URL, JSONObject.class,new AjaxCallback<JSONObject>(){
    @Override
    public void callback(String url, JSONObject object, AjaxStatus status) {

        try {
            bean = new Bean();
            list = new ArrayList<Bean>();
            String string = object.getString("data");
            JSONArray jsonArray = new JSONArray(string);
            for (int i=0;i<jsonArray.length();i++) {
                jsonObject = jsonArray.getJSONObject(i);
                bean.setPropertyName("property_name");
                bean.setPropertyDescription("property_desc");
                list.add(bean);
            }
            // update data
            mAdapter.updateData(list);

           } catch (JSONException e) {
              e.printStackTrace();
           }


       }
   });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 主要活动 Recycler View - Fragment 开关 - Main activity Recycler View - Fragment switch 设置意图,在回收者视图中选择OnCreate转到特定列表(行)的另一个特定活动 - set intent, OnCreate in recycler view to go to another specific activity for specific list(row) 如何在同一活动中添加回收站视图和抽屉布局? - How can I add recycler view and drawer layout in same activity? 碎片活动的回收者视图 - Recycler View on Fragment Activity 抽屉布局中的回收站视图 - Recycler View in Drawer Layout 如何从第二个活动中获取 ArrayList 并将其显示在主活动的 Recycler 视图中 - How to get ArrayList from second Activity and show it in a Recycler view in the Main Activity 将主回收站视图从content_main移到我的res文件中的另一个布局后,应用程序崩溃 - App Crashes after moving main recycler view from content_main to another layout in my res files 如何在单击按钮时将contentview设置为R.layout.activity_main - How to set contentview as R.layout.activity_main on button click 回收站视图:未连接适配器; 跳过布局(API 的回收站视图中的错误) - Recycler view: no adapter attached; skipping layout(Error in recycler view for API ) 选项卡布局内的水平回收器视图 - Horizontal Recycler View inside Tab Layout
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM