对ListView使用/显示特定的ArrayList字符串

时间:2019-04-29 14:43:37

标签: android arrays listview arraylist

我无法从ListView中的ArrayList中显示正确的字符串。

我的数组(m_​​aDataList)如下:

    m_aDataList {ArrayList}
      {...}0
         m_cText = "R;21;9;River Street 2;12154;;1;.......
         m_cTimeStamp = 1556553367492
         m_nID = 7
         m_nStatus = 0
         m_nType = 10002
       {...}1
....

这是我当前尝试在ListView中显示ArrayList的方式:

ArrayAdapter<Message> tuAdapter;
        MessageManager tu = new MessageManager();
        ArrayList<Message> list = tu.getMessageData();
        tuAdapter = new ArrayAdapter<Message>(this, android.R.layout.simple_list_item_1, list);
        lvOrders.setAdapter(tuAdapter);

它在技术上有效,并且在我的ListView中添加了类似的内容:

de.telematik.testapp.entities.Message@232d9c76

但是我想做的是,仅在m_nType == 10002的地方显示消息,并在ListView中这样显示它们:

Order: 12154 (order number from m_cText)

检查m_nType是否= 10002或10000都不是问题。但是,如何从字符串m_cText中获取订单号,然后将其显示在ListView中呢?

无论如何,谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正在使用基本的默认列表适配器,但是正在向其传递对象数组(消息)。为了控制列表中显示的内容,您将需要创建自己的自定义适配器类,该类将扩展(可能是基本适配器)标准适配器类之一。您将以类似于将列表传递到简单列表适配器的方式来调用它。这是一个示例自定义列表适配器:

ClaimListAdapter.java

            package com.mycompany.myapp.adapter;

            import java.text.ParseException;
            import java.text.SimpleDateFormat;
            import java.util.ArrayList;
            import java.util.Date;

            import com.mycompany.myapp.R;
            import com.mycompany.myapp.ClaimListFragment;
            import com.mycompany.myapp.model.ClaimItem;

            import android.annotation.SuppressLint;
            import android.app.Activity;
            import android.content.Context;
            import android.view.LayoutInflater;
            import android.view.View;
            import android.view.ViewGroup;
            import android.view.View.OnClickListener;
            import android.widget.BaseAdapter;
            import android.widget.Button;
            import android.widget.TextView;


            public class ClaimListAdapter extends BaseAdapter {

                private Context context;
                private ArrayList<ClaimItem> claimItems;
                ClaimListFragment fragment;

                public ClaimListAdapter(ClaimListFragment fragment, Context context, ArrayList<ClaimItem> claimItems){
                    this.context = context;
                    this.claimItems = claimItems;
                    this.fragment = fragment;
                }

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

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

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

                @SuppressLint("InflateParams")
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {

                // This method gets called for every item in the list when it is about to be displayed in the list

                    // This helps you get a reference to the layout of the list item
                    if (convertView == null) {
                        LayoutInflater mInflater = (LayoutInflater)
                                context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                        convertView = mInflater.inflate(R.layout.claim_list_item, null);
                    }

                    // If you have a button that you want to perform some function, such as delete, and then call
                    // a method back in the parent to update the items in the array, this is one way to do it
                    Button btnDelete = (Button) convertView.findViewById(R.id.claim_delete_in_list);
                    // Save the position of the item in the list, so, you know which item was clicked
                    btnDelete.setTag(position);

                    btnDelete.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            Integer position = (Integer)v.getTag();
                            // Call this method which is back in the parent, which in this case is a fragment, but could be an Activity
                            fragment.deleteItemList(position);
                        }
                    });

                    btnDelete.setVisibility(View.GONE);

                    // Here you get a reference to the various TextViews in your layout 
                    TextView txtTitle = (TextView) convertView.findViewById(R.id.claim_title);
                    TextView txtStatus = (TextView) convertView.findViewById(R.id.claim_status);
                    TextView txtDate = (TextView) convertView.findViewById(R.id.claim_date);
                    TextView txtDistance = (TextView) convertView.findViewById(R.id.claim_distance);
                    TextView txtAmount = (TextView) convertView.findViewById(R.id.claim_amount);

                    // Here you get the various strings out of your object for display
                    String claim_title = claimItems.get(position).getDocumentID();

                    if (claim_title == null) {
                        claim_title = "";
                    }


                    String claim_status = claimItems.get(position).getClaimStatus();

                    String claim_date = claimItems.get(position).getClaimDate();

                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                    Date date = null;

                    try {
                        date = (Date) dateFormat.parse(claim_date);
                        dateFormat = new SimpleDateFormat("M/d/yyyy"); 
                        String formattedDate = dateFormat.format(date);
                        txtDate.setText(formattedDate);

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


                    double total_miles = claimItems.get(position).getTotalMiles();
                    double total_amount = claimItems.get(position).getTotalAmount();

                   // Here you set the values in the TextView for display
                    txtTitle.setText(claim_title);
                    txtStatus.setText(claim_status);

                    txtDistance.setText("" + total_miles + "mi");
                    txtAmount.setText("$" + total_amount);

                    return convertView;
                }

            }

或者,您可以创建一个仅包含消息数组中的订单号的字符串数组,然后将该数组而不是消息数组传递给列表适配器。