繁体   English   中英

在 LinearLayout (Android) 中获取视图的位置

[英]Get the position of view in LinearLayout (Android)

A 最近有一个自定义 ListView。 然后我不得不在没有滚动条的情况下显示所有列表项。 按照在 LinearLayout 中放置项目方法,我更改了代码,但无法将 onClickListener 绑定到新布局。 在 ListView 中,我使用位置变量来确定触摸了哪个视图。 但是在 LinearLayout onClick 回调中没有位置参数。

这是我的 BasketActivity.class:

package ru.**.**;

public class BasketActivity extends Activity {

    ArrayList<Item> items = new ArrayList<Item>();
    SQLiteDatabase database;
    Map<String, ?> all;
    ItemAdapter adapter;
    Item item2delete;
    View deletingView;

    private SharedPreferences settings;
    private SharedPreferences settings2;
    private Basket basket;
    TextView basketSum;
    private int position2delete;
    private Map<String, ?> all2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basket);

        <..cutted..>

        settings = getSharedPreferences("basket", 0);
        settings2 = getSharedPreferences("price", 0);
        basket = new Basket(settings, settings2);
        all = basket.getList();

        LinearLayout l1 = (LinearLayout) findViewById(R.id.l1);
        MyDBAdapter myDBAdapter = new MyDBAdapter(getBaseContext());
        myDBAdapter.open();
        Cursor itemCursor = myDBAdapter.getItemsInBasket(all);
        while (itemCursor.moveToNext()) {

            String[] columns = itemCursor.getColumnNames();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < columns.length; i++) {
                sb.append(columns[i]);
            }

            Item item = new Item();
            item.setId(itemCursor.getString(0));
            item.setArticul(itemCursor.getString(MyDBSchema.ITEM_ARTICUL));
            item.setTitle(itemCursor.getString(MyDBSchema.ITEM_TITLE));
            item.setPrice(itemCursor.getInt(MyDBSchema.ITEM_PRICE));
            item.setPic80(itemCursor.getString(MyDBSchema.ITEM_PIC80));
            item.setPic300(itemCursor.getString(MyDBSchema.ITEM_PIC300));
            item.setMessage(itemCursor.getString(MyDBSchema.ITEM_MESSAGE));
            item.setColor(itemCursor.getString(MyDBSchema.ITEM_COLOR));
            item.setColorpos(itemCursor.getString(MyDBSchema.ITEM_COLORPOS));
            items.add(item);
        }
        itemCursor.close();
        myDBAdapter.close();

        for (int position=0; position<items.size(); position++) {
            LayoutInflater inflater = getLayoutInflater();
            View v = inflater.inflate(R.layout.list_basket, null);

            final Item i = items.get(position);
                if (i != null) {
                    Item ei = (Item) i;

                    final TextView title = (TextView) v.findViewById(R.id.title);
                    if (title != null) title.setText(ei.title);

                    final TextView articul = (TextView) v.findViewById(R.id.articul);
                    if (articul != null) articul.setText(ei.articul);

                    TextView payed = (TextView) v.findViewById(R.id.payed);
                    if (payed != null) payed.setVisibility(TextView.GONE);

                    TextView status = (TextView) v.findViewById(R.id.status);
                    if (status != null) status.setVisibility(TextView.GONE);

                    Context context = getBaseContext();
                    ProgressBar p = new ProgressBar(context);
                    p.setIndeterminate(true);
                    Drawable d = p.getIndeterminateDrawable();          
                    WebImageView wiv = (WebImageView) v.findViewById(R.id.pic80);
                    wiv.setImageWithURL(context, ei.pic80, d);

                    final TextView price = (TextView) v.findViewById(R.id.price);
                    if (price != null) price.setText(ei.price_valid);

                    final TextView quant = (TextView) v.findViewById(R.id.quant);
                    if (quant != null) {
                        int q = (Integer) all.get(ei.articul);
                        if (q > 1) {
                            quant.setText("x "+q+" шт.");
                        }
                    }

                }
                v.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        deletingView = v;
                        int position = 0; //The order number of the view should be here!
                        Item item = (Item) items.get(position);
                        item2delete = item;
                        position2delete = position;

                        AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
                        builder.setMessage(getString(R.string.suredelete))
                                .setCancelable(false)
                                .setPositiveButton(getString(R.string.yes),
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {
                                                BasketActivity.this.removeItem();
                                                deletingView.setVisibility(View.GONE);
                                            }
                                        })
                                .setNegativeButton(getString(R.string.no),
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {
                                                dialog.cancel();
                                            }
                                        });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
                });
                l1.addView(v);
        }


        basketSum = (TextView) findViewById(R.id.basketsum);
        basketSum.setText(Html.fromHtml(getString(R.string.basketsum) + ": <b>"
                + basket.getBasketPriceValid() + "</b>"));
    }

    protected void removeItem() {
        basket.remove(item2delete);
        Context context = getApplicationContext();
        CharSequence text = getText(R.string.item_deleted);
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(context, text, duration);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();
        basketSum.setText(Html.fromHtml(getString(R.string.basketsum) + ": <b>"
                + basket.getBasketPriceValid() + "</b>"));
        items.remove(position2delete);
    }
}

我的问题是如何在onClick(View v)获得视图的位置?

您可以使用View'的标签;

for (int position=0; position<items.size(); position++) {
    v.setTag(position);
}

并在onClick(View v)

public void onClick(View v) {
    int position = 0;
    if (v.getTag() instanceof Integer) {
       position = (Integer) v.getTag();
    }
}

你能有吗

v.setTag(items.get(position).getId();

然后在onClick

public void onClick(View v) {
  int id= v.getTag();
}

你可以有

val index =  parent.indexOfChild(child)

暂无
暂无

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

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