繁体   English   中英

如何使Section ListView Header不可点击?

[英]How to make Section ListView Header unclickable?

我有一个节列表视图,并且有一个行和标题。 标头显示月份和年份,其中行显示利润和物料。 我为“行”创建了一个对话框,但是每当我单击“标题”时,都会提示我错误。 如何使标题不可点击?

我的适配器类

public class TransactionAdapter extends BaseAdapter {

    ArrayList<Object> transactions;
    Context c;
    LayoutInflater inflater;
    static final int ROW = 0;
    static final int HEADER = 1;

    public TransactionAdapter(Context c, ArrayList<Object> transactions){
        this.c = c;
        this.transactions = transactions;
    }

    //Get size of the Transaction ArrayList
    @Override
    public int getCount() {
        return transactions.size();
    }

    //Get single transaction from the Transaction ArrayList
    @Override
    public Object getItem(int position) {
        return transactions.get(position);
    }

    //Get Single transaction identifier from the Transaction ArrayList
    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position){
        //Check the current transaction is Transaction
        if(getItem(position) instanceof ProfitTransactions){
            return ROW;
        }
        return HEADER;
    }

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


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        //Type of View which is ROW(0) or HEADER(1)
        int type = getItemViewType(position);

        //If there is no View create it,
        if (convertView == null) {
            inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            switch (type) {
                case ROW:
                    convertView = inflater.inflate(R.layout.activity_transaction_items, null);
                    break;
                case HEADER:
                    convertView = inflater.inflate(R.layout.activity_transaction_header, null);
                    convertView.setBackgroundColor(Color.rgb(220,220,220));

                default:
                    break;
            }
        }

        switch (type){
            case ROW:
                ProfitTransactions transaction = (ProfitTransactions)getItem(position);

                TextView tvDay = (TextView)convertView.findViewById(R.id.day);
                TextView tvTID = (TextView)convertView.findViewById(R.id.tID);
                TextView tvTotalPrice = (TextView)convertView.findViewById(R.id.totalPrice);
                TextView tvTimeOrder = (TextView)convertView.findViewById(R.id.tvTime);

                Log.d("transadapter","-----Test: " + Integer.parseInt(transaction.getDayOfOrder()));
                tvDay.setText(transaction.getDayOfOrder()+ getDayNumberSuffix(Integer.parseInt(transaction.getDayOfOrder())));
                tvTID.setText("TID: " + transaction.gettId());
                tvTotalPrice.setText("+$"+String.format("%.2f", transaction.getTotalPrice()));
                tvTimeOrder.setText("At: " + transaction.getTimeOfOrder());
                break;
            case HEADER:
                String header = (String)getItem(position);
                // from string to date

                SimpleDateFormat inputFormat = new SimpleDateFormat("MM/yyyy");
                Date date = null;
                try {
                    date = inputFormat.parse(header);
                } catch (ParseException e) {
                    e.printStackTrace();
                }

                // from date to string
                SimpleDateFormat outputFormat = new SimpleDateFormat("MMM yyyy");
                String dateTime = outputFormat.format(date);


                TextView tvMonthYear = (TextView)convertView.findViewById(R.id.tvHeaderMonthYear);
                tvMonthYear.setText(dateTime);

                default:
                    break;
        }

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                ProfitTransactions transaction = (ProfitTransactions)getItem(position);
                //Create the Dialog Box
                AlertDialog.Builder builder = new AlertDialog.Builder(c);

                //Put message in the Dialog Box
                builder.setMessage("Name: " + transaction.getName() + "\n" +
                        "Price: " + transaction.getPrice() + "\n" +
                        "Quantity: " + transaction.getQuantity() + "\n" +
                        "Total Price: " + transaction.getTotalPrice() + "\n"
                )

                        //If user click Yes
                        .setPositiveButton("Close", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {



                            }
                        });



                //Show the dialog after creating
                AlertDialog dialog = builder.show();
            }
        });

        return convertView;

    }

}

我想要的预期结果是我希望包含月份和年份的标题不可单击,并且不会响应任何内容。

与决定要填充的内容以及如何在getView方法中填充视图的方式相同,可以将所需类型的OnClickListener设置为null。 您也可以使用setClickable方法。

在getViewMethod内部使用此

case HEADER:
                convertView = inflater.inflate(R.layout.activity_transaction_header, null);
                convertView.setBackgroundColor(Color.rgb(220,220,220));
                convertView.setEnabled(false);

在convertView.setOnClickListener之前,添加if逻辑,以检查convertView是标题还是所选的行! 喜欢-

if(!convertView.equals("HEADER"))
{
your onClick listener.....
}
else
{
what you want to do if its headerview being the view selected...
}

当前,您正在每个视图上注册点击侦听器。 您只想将其分配给行,而不是标题,因为在处理程序中,您试图访问仅存在于行上的ProcessTransaction上的字段。

因此,只需将您的点击侦听器代码拉到交换机的ROW分支中即可。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    //Type of View which is ROW(0) or HEADER(1)
    int type = getItemViewType(position);

    //If there is no View create it,
    if (convertView == null) {
        inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        switch (type) {
            case ROW:
                convertView = inflater.inflate(R.layout.activity_transaction_items, null);
                break;
            case HEADER:
                convertView = inflater.inflate(R.layout.activity_transaction_header, null);
                convertView.setBackgroundColor(Color.rgb(220,220,220));

            default:
                break;
        }
    }

    switch (type){
        case ROW:
            ProfitTransactions transaction = (ProfitTransactions)getItem(position);

            TextView tvDay = (TextView)convertView.findViewById(R.id.day);
            TextView tvTID = (TextView)convertView.findViewById(R.id.tID);
            TextView tvTotalPrice = (TextView)convertView.findViewById(R.id.totalPrice);
            TextView tvTimeOrder = (TextView)convertView.findViewById(R.id.tvTime);

            Log.d("transadapter","-----Test: " + Integer.parseInt(transaction.getDayOfOrder()));
            tvDay.setText(transaction.getDayOfOrder()+ getDayNumberSuffix(Integer.parseInt(transaction.getDayOfOrder())));
            tvTID.setText("TID: " + transaction.gettId());
            tvTotalPrice.setText("+$"+String.format("%.2f", transaction.getTotalPrice()));
            tvTimeOrder.setText("At: " + transaction.getTimeOfOrder());

            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

            ProfitTransactions transaction = (ProfitTransactions)getItem(position);
            //Create the Dialog Box
            AlertDialog.Builder builder = new AlertDialog.Builder(c);

            //Put message in the Dialog Box
            builder.setMessage("Name: " + transaction.getName() + "\n" +
                    "Price: " + transaction.getPrice() + "\n" +
                    "Quantity: " + transaction.getQuantity() + "\n" +
                    "Total Price: " + transaction.getTotalPrice() + "\n"
            )

                    //If user click Yes
                    .setPositiveButton("Close", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {



                        }
                    });



            //Show the dialog after creating
            AlertDialog dialog = builder.show();
        }
    });
            break;
        case HEADER:
            String header = (String)getItem(position);
            // from string to date

            SimpleDateFormat inputFormat = new SimpleDateFormat("MM/yyyy");
            Date date = null;
            try {
                date = inputFormat.parse(header);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            // from date to string
            SimpleDateFormat outputFormat = new SimpleDateFormat("MMM yyyy");
            String dateTime = outputFormat.format(date);


            TextView tvMonthYear = (TextView)convertView.findViewById(R.id.tvHeaderMonthYear);
            tvMonthYear.setText(dateTime);

            default:
                break;
    }

    return convertView;

}

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM