簡體   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