2016-06-30 8 views
0

データを解析してListPropertyクラスに表示しています。私はRecyclerViewCardViewを行レイアウトとして使用しています。どういうわけかすべて正常に動作しています。私は冗長でエラーが表示されません。しかし、私の主な活動にはデータと行のレイアウトが表示されます。アクティビティが空白になっています。私は何時間も努力していますが、種類が間違っています。誰かが私の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> 

これは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> 

ですこれは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(); 
} 

} 

であり、これは私の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(); 
       } 


      } 
     }); 
    } 
} 
+0

は、あなたがしようとしているデバッガを置くと 'dataList'がnullでないかどうかを確認? – Sanoop

+0

** ** catch節の直前で** mAdapter.notifyDataSetChanged(); **を呼び出します。これにより、 – Sanoop

答えて

1

親LinearLayoutを削除してみてください。 CardViewがリスト項目として機能しているためです。

この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> 

が、それは:)

1

ちょうど以下のようにあなたのActivitynotifyDataSetChanged()を追加するのに役立ちます願っています。そのため、あなたのコールバックに

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(); 
       } 


      } 
     }); 
1

をおリストの新しいインスタンスを作成しました

list = new ArrayList<Bean>(); 

実際には、アダプタの新しい作成リストとDataListは、2つの差分オブジェクトを指しています。>ここでnotifyDataSetChangedを呼び出すと動作しません。 MyAdapter上の方法にupdateDataを書いてみて、あなたのコールバックでコールバックメソッド

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

からそれを呼び出す:

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(); 
      } 


     } 
    }); 
関連する問題