2016-08-07 19 views
0

私はListViewとカスタムアダプターを持っていて、ListViewの内部にデータを表示しようとしています。私はデータを表示するために3つのレイアウトを持っていますが、データを表示することはできません。私は、GROCERYのハードコーディングされたテキストに、リストビューのために各行に、私が望む3つのレイアウトではなく、それらの尊重されたデータを設定しています。私は、アダプタにアタッチtryign午前1つのレイアウトに3つのレイアウトを追加する際に問題が発生しました

CustomAdapter

public class CompleteEReceiptDisplay extends Activity implements AppCompatCallback { 
private AppCompatDelegate delegate; 
Toolbar mToolbar; 
private ImageView menuBtn, backBtn; 
ListView mFullReceiptLV; 
List<EreceiptPojo> mainList = new ArrayList<>(); 
private LayoutInflater mInflater; 
private RelativeLayout mFullItemLine; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //Show Toolbar without extending AppCompatActivity 
    delegate = AppCompatDelegate.create(this, this); 
    delegate.onCreate(savedInstanceState); 
    delegate.setContentView(R.layout.complete_ereceipt_display); 
    delegate.setSupportActionBar(mToolbar); 
    mFullReceiptLV = (ListView) findViewById(R.id.fullEReceiptListView); 
    menuBtn = (ImageView) findViewById(R.id.menuBtn); 
    backBtn = (ImageView) findViewById(R.id.icnBackArrow); 
    menuBtn.setVisibility(View.GONE); 
    backBtn.setVisibility(View.VISIBLE); 
    backBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onBackPressed(); 
     } 
    }); 
    parseList(); 
    FullEReceiptAdapter mFullAdapter = new FullEReceiptAdapter(this); 
    mFullReceiptLV.setAdapter(mFullAdapter); 
} 

private void parseList() { 
    String itemCateg = "", itemPrice = "", itemDesc = ""; 
    HashMap<String, List<HashMap<String, String>>> mHashMap = new HashMap<>(); 
    List<LineDetail> mLineDetailList = MainActivity.mCompleteReceiptData.getLineDetailList().getLineDetail(); 

    for (int i = 0; i < mLineDetailList.size(); i++) { 
     LineDetail lineDetail = mLineDetailList.get(i); 

     itemPrice = lineDetail.getPrice(); 
     List<Item> itemList = lineDetail.getCustomAttributes().getItem(); 
     for (int j = 0; j < itemList.size(); j++) { 
      Item it = itemList.get(j); 
      if (it.getKey().equalsIgnoreCase("PrintCategory")) { 
       itemCateg = it.getValue(); 
      } else if (it.getKey().equalsIgnoreCase("ItemDescription")) { 
       itemDesc = it.getValue(); 
      } 
     } 
     HashMap<String, String> hm = new HashMap<>(); 
     hm.put(itemDesc, itemPrice); 


     if (mHashMap.containsKey(itemCateg)) { 
      mHashMap.get(itemCateg).add(hm); 
     } else { 

      List<HashMap<String, String>> mMap = new ArrayList<>(); 
      mMap.add(hm); 
      mHashMap.put(itemCateg, mMap); 
     } 
    } 
    for (Map.Entry<String, List<HashMap<String, String>>> entry : mHashMap.entrySet()) { 
     itemCateg = entry.getKey(); 
     double mDouble = 0.00; 

     EreceiptPojo ereceiptPojo = new EreceiptPojo(); 
     ereceiptPojo.setItemName(itemCateg); 
     ereceiptPojo.setCategory(true); 
     ereceiptPojo.setSubTotal(false); 
     mainList.add(ereceiptPojo); 

     List<HashMap<String, String>> dummyList = entry.getValue(); 
     for (int i = 0; i < dummyList.size(); i++) { 
      HashMap<String, String> hm1 = new HashMap<>(); 
      hm1 = dummyList.get(i); 
      for (Map.Entry<String, String> entry1 : hm1.entrySet()) { 
       EreceiptPojo ereceiptPojo1 = new EreceiptPojo(); 
       ereceiptPojo.setItemName(entry1.getKey()); 
       ereceiptPojo1.setItemPrice(entry1.getValue()); 
       ereceiptPojo1.setCategory(false); 
       ereceiptPojo1.setSubTotal(false); 
       mainList.add(ereceiptPojo1); 

       mDouble = mDouble + Double.parseDouble(entry1.getValue()); 

      } 
     } 
     EreceiptPojo mEreceiptPojo = new EreceiptPojo(); 
     mEreceiptPojo.setItemPrice(String.valueOf(mDouble)); 
     mEreceiptPojo.setCategory(false); 
     mEreceiptPojo.setSubTotal(true); 
     mainList.add(mEreceiptPojo); 
    } 
} 

@Override 
public void onSupportActionModeStarted(ActionMode mode) { 

} 

@Override 
public void onSupportActionModeFinished(ActionMode mode) { 

} 

@Nullable 
@Override 
public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) { 
    return null; 
} 

public class FullEReceiptAdapter extends BaseAdapter { 

    public static final int TYPE_ITEM = 0; 
    public static final int TYPE_CATEGORY = 1; 
    public static final int TYPE_ITEM_NAME = 2; 
    public static final int TYPE_PRICE = 3; 

    public FullEReceiptAdapter(Context context) { 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public int getCount() { 
     return mainList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mainList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 2; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     EreceiptPojo obj = mainList.get(position); 
     ViewHolder holder = null; 
     int layout_type = getItemViewType(position); 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(R.layout.full_receipt_category_header, parent, false); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     if (obj.isCategory() == true) { 
      holder = new ViewHolder(); 
      holder.mHeaderView = (LinearLayout) convertView.findViewById(R.id.full_receipt_category_header_layout); 
     } 
     if (obj.isSubTotal() == true) { 
      holder = new ViewHolder(); 
      holder.mLineItemsTotalPrice = (LinearLayout) convertView.findViewById(R.id.subTotalView); 
     } 

     if(obj.getItemName().length() > 0 && obj.getItemPrice().length() > 0) { 
      holder = new ViewHolder(); 
      holder.mLineItemName = (RelativeLayout) convertView.findViewById(R.id.full_receipt_item_line); 
     } 

     return convertView; 
    } 
} 

public static class ViewHolder { 
    public LinearLayout mHeaderView; 
    public TextView mLineItemName; 
    public TextView mLineItemPrice; 
    public LinearLayout mLineItemsTotalPrice; 
} 

}

三レイアウト。 最初のレイアウトは、ListView内で繰り返されるレイアウトです。

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

     <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/full_receipt_category_header_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:paddingLeft="15dp" 
      android:text="GROCERY" 
      android:textAllCaps="true" 
      android:textColor="@color/colorBlack" 
      android:textSize="22dp" 
      android:textStyle="bold" /> 

    </LinearLayout> 

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

     <TextView 
      android:id="@+id/txtLineItem" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="CUB SPLT TOP WHEAT" 
      android:textSize="16sp"/> 

     <TextView 
      android:id="@+id/txtLineItemPrice" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="$1.70*" 
      android:layout_alignParentRight="true"/> 

    </RelativeLayout> 

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

     <View 
      android:layout_width="50dp" 
      android:layout_height="1dp" 
      android:layout_marginTop="5dp" 
      android:background="@color/colorGrey" 
      android:layout_gravity="right"/> 

     <TextView 
      android:id="@+id/txtCategoryTotalPrice" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="7dp" 
      android:text="$5.70" 
      android:textColor="@color/colorBlack" 
      android:layout_gravity="right"/> 

    </LinearLayout> 

The layout that contains the ListView 

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

    <include 
     android:id="@+id/app_bar" 
     layout="@layout/app_bar" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/bg_receipt" 
     android:padding="10dp"> 

    <ImageView 
     android:id="@+id/bannerReceiptLogo" 
     android:layout_width="170dp" 
     android:layout_height="75dp" 
     android:background="@drawable/img_logo_receipt_cub" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="30dp"/> 

     <TextView 
      android:id="@+id/bannerAddressHeader" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      android:text="@string/storeHeader" 
      android:layout_below="@id/bannerReceiptLogo" 
      android:layout_marginTop="10dp" 
      android:textAlignment="center" 
      android:layout_centerHorizontal="true" 
      android:textSize="18sp"/> 

     <ListView 
      android:id="@+id/fullEReceiptListView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/bannerAddressHeader" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="5dp"> 
     </ListView> 

    </RelativeLayout> 
</LinearLayout> 

答えて

0

ビュー内の各位置について、アダプタ内の各レイアウトを膨らませなければならなかったので、これを実行できました。チャンスはgetView()にあります。

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     EreceiptPojo obj = mainList.get(position); 
     TaxDetail taxDetail = new TaxDetail(); 
     ViewHolder holder = null; 
     if (obj.isCategory()) { 
      convertView = mInflater.inflate(R.layout.full_receipt_category_header, parent, false); 
      TextView mCat = (TextView) convertView.findViewById(R.id.full_receipt_category_header_text); 
      mCat.setText(obj.getItemName()); 

     } 
     else if (obj.isSubTotal()) { 
      convertView = mInflater.inflate(R.layout.full_receipt_category_total, parent, false); 
      TextView subTotal = (TextView) convertView.findViewById(R.id.txtCategoryTotalPrice); 
      subTotal.setText(obj.getItemPrice()); 
     } 
     else if(!obj.isSubTotal() && !obj.isCategory()){ 
      convertView = mInflater.inflate(R.layout.full_receipt_item_line, parent, false); 
      TextView itemName = (TextView) convertView.findViewById(R.id.txtLineItem); 
      TextView itemPrice = (TextView) convertView.findViewById(R.id.txtLineItemPrice); 
      itemName.setText(obj.getItemName()); 
      itemPrice.setText(obj.getItemPrice()); 
     } else { 
      convertView = mInflater.inflate(R.layout.tax_layout, parent, false); 
      TextView mFinalSubtotal = (TextView) convertView.findViewById(R.id.txtSubTotalFinal); 
      TextView mTotalTax = (TextView) convertView.findViewById(R.id.txtTaxTotal); 
      TextView mPurchaseTotal = (TextView) convertView.findViewById(R.id.txtCompleteTotalNumber); 
      for(int i = 0; i < obj.getItemPrice().length(); i++) { 
       String subTotalFinal = obj.setItemPrice(i); 
      } 
関連する問題