2017-11-10 14 views
3

私はゲージを表示するためにAndroidアプリを開発しています。さまざまなタイプのゲージがあります(gauge1.xmlゲージ2.xmlそうです)。 私は何をしたいのですかレイアウトxmlファイルをメイングリッドビューにロードするには、JSONアレイを使用してください。複数のレイアウトをGridViewに表示

各グリッドセルには、JSONオブジェクトに従って異なるレイアウトが含まれています。

マイ JSONオブジェクト

{"user1": [{"ui": "gauge", "id": "gauge1", "value": 69}, {"ui": 
    "gauge", "id": "gauge2", "value": 23}]} 

Gauge1.xml

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

    <pl.pawelkleczkowski.customgauge.CustomGauge 
     android:id="@+id/gauge1" 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:layout_centerHorizontal="true" 
     android:paddingBottom="20dp" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" 
     android:paddingTop="20dp" 
     app:gaugePointStartColor="@color/md_red_500" 
     app:gaugePointEndColor="@color/md_red_500" 
     app:gaugePointSize="6" 
     app:gaugeStartAngle="135" 
     app:gaugeStrokeCap="ROUND" 
     app:gaugeStrokeColor="@color/md_grey_400" 
     app:gaugeStrokeWidth="10dp" 
     app:gaugeStartValue="0" 
     app:gaugeEndValue="1000" 
     app:gaugeSweepAngle="270" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/gauge1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="18dp" 
     android:text="256" 
     android:textSize="20dp" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="18dp" 
     android:text="Temp" 
     android:textSize="20dp" 
     android:textStyle="bold" /> 


</RelativeLayout> 

私はそれをどのように行うことができますか?

ゲージにpkleczko's CustomGaugeを使用しています。

答えて

0

アダプタのgetViewメソッドでは、必要に応じてレイアウト(gauge1.xmlまたはgauge2.xml)を拡張します。たとえば、ゲージIDにifを使用します。

この手順に従って:

  • 膨張、検索項目に記載の方法
  • によって提供される位置にある項目を取得GetViewメソッドでGridViewの延びるベースアダプタ
  • ためのアダプタを定義します正しいレイアウト
public class UsersAdapter extends BaseAdapter { 

     private final Context mContext; 
     private final User[] users; 

     public UsersAdapter(Context context, User[] users) { 
     this.mContext = context; 
     this.users = users; 
     } 

     @Override 
     public int getCount() { 
     return users.length; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
     User curUser = users[position]; 
     LayoutInflater inflater = LayoutInflater.from(context); 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      if (//curUser needs gauge1 layout//){ 
       convertView = inflater.inflate(R.layout.gauge1, parent, false); 
       // do what you need with the layout gauge 1 
      }else{ 
       convertView = inflater.inflate(R.layout.gauge2, parent, false); 
       // do what you need with the layout gauge 1 
      } 
     } 
     return convertView; 
     } 

    } 
0

はリサイクラービューと変更layoを使用しようutマネージャーをグリッド形式にして、このようなアダプタを作成してください:

注:コーディングを深めてはいけません。

パブリッククラスSubCategoryAdapterは//あなたの応答からここにあなたの条件を定義RecyclerView.Adapter {

private final int VIEW_GRID = 1; 
private final String[] listdata; 
private Context context; 
Gson gson; 


public SubCategoryAdapter(Context context, String[] listdata) { 
    this.context = context; 
    this.listdata = listdata; 
    gson = new Gson(); 
} 


@Override 
public int getItemViewType(int position) { 

    if (isPositionItem(position)){ 
     return 1; 
    } 
    else { 
     return 2; 
    } 
} 

private boolean isPositionItem(int position) { 

を拡張

if(position==0) { 
     return true; 
    }else{ 
     return false; 
    } 
} 

@Override 
public int getItemCount() { 
    return listdata.length; 
} 


@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     if (viewType == 1) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_bb_verticallist, parent, false); 
     return new ViewHolder1(v); 
    } else if (viewType == 2){ 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_root_bb_gridlist, parent, false); 
     return new ViewHolder2(v); 
    } 
    return null; 


} 


public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { 

    if (holder instanceof ViewHolder) { 
     if(position <= listdata.length) { 

      switch (holder.getItemViewType()){ 

       case 1: 
        // your viewholder1 
        break; 

       case 2: 
       // your view holder2 
        break; 

      } 

     } 

    } 

} 

public class ViewHolder extends RecyclerView.ViewHolder { 

    TextView title; 
    RecyclerView recycler_childView; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     title = (TextView)itemView.findViewById(R.id.title); 
     recycler_childView = (RecyclerView) itemView.findViewById(R.id.list); 

    } 
} 
ViewHolder2は{

TextView title; 
    RecyclerView recycler_childView; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     title = (TextView)itemView.findViewById(R.id.title); 
     recycler_childView = (RecyclerView) itemView.findViewById(R.id.list); 

    } 
} 

RecyclerView.ViewHolderを拡張

パブリッククラス}

関連する問題