簡體   English   中英

通過布局充氣機添加的按鈕上的onClickListener

[英]onClickListener on a button that is added through a layout inflator

到目前為止,這是我的代碼,基於對SO相關問題的各種答案。

在我的活動中

    GridView gv = (GridView) findViewById(R.id.gridView1);
    MyCustomAdapter mAdapter = new MyCustomAdapter();
    mAdapter.addItem("Action1");
    mAdapter.addItem("Action2");
    mAdapter.addItem("Action3");
    gv.setAdapter(mAdapter);

我的適配器

private class MyCustomAdapter extends BaseAdapter {

    private ArrayList<String> mData = new ArrayList<String>();
    private LayoutInflater mInflater;

    public MyCustomAdapter() {
        mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public void addItem(final String item) {
        mData.add(item);
        notifyDataSetChanged();
    }

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

    @Override
    public String getItem(int position) {
        return mData.get(position);
    }

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


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        NumericViewHolder holder = new NumericViewHolder();
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.horizontalnumberpicker, null);

            holder.textView = (TextView)convertView.findViewById(R.id.txtNPTitle);
            holder.minus = (Button)convertView.findViewById(R.id.btnMinus);                
            holder.plus = (Button)convertView.findViewById(R.id.btnPlus);                
            holder.value = (TextView)convertView.findViewById(R.id.txtNPValue);

            holder.minus.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    TextView tv = (TextView) v.findViewById(R.id.txtNPValue);
                    int value = Integer.parseInt(tv.getText().toString());
                    Toast.makeText(getApplicationContext(), Integer.toString(value), Toast.LENGTH_SHORT).show();
                    if (value > 0) {
                        value = value - 1;
                        tv.setText(Integer.toString(value));
                    }
                }
            });

            holder.plus.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    TextView tv = (TextView) v.findViewById(R.id.txtNPValue);
                    int value = Integer.parseInt(tv.getText().toString());    <--Error is here
                    Toast.makeText(getApplicationContext(), Integer.toString(value), Toast.LENGTH_SHORT).show();
                    value = value + 1;
                    tv.setText(Integer.toString(value)); 
                }
            });
            convertView.setTag(holder);
        } else {
            holder = (NumericViewHolder)convertView.getTag();
        }

        holder.textView.setText(mData.get(position));
        return convertView;
    }
}

XML-Main_Activity

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

<Button
    android:id="@+id/btnSaveProduct"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginEnd="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="20dp"
    android:text="@string/Save" />

<TextView
    android:id="@+id/lblSelectCategory"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/btnSaveProduct"
    android:layout_alignBottom="@+id/btnSaveProduct"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="20dp"
    android:layout_marginStart="20dp"
    android:text="@string/selectCategory" />

<Spinner
    android:id="@+id/spCategory"
    android:layout_width="250dp"
    android:layout_height="40dp"
    android:layout_alignBottom="@+id/lblSelectCategory"
    android:layout_marginLeft="33dp"
    android:layout_marginStart="33dp"
    android:layout_toEndOf="@+id/lblSelectCategory"
    android:layout_toRightOf="@+id/lblSelectCategory" />

<GridView
    android:id="@+id/gridView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/lblSelectCategory"
    android:layout_below="@+id/btnSaveProduct"
    android:layout_marginTop="14dp"
    android:numColumns="auto_fit" >
</GridView>

</RelativeLayout>

XML-Horizo​​ntalNumberpicker

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

<TextView
    android:id="@+id/txtNPTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="EnterTextHere" 
    android:layout_marginTop="5dp" />

<Button
    android:id="@+id/btnPlus"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignBaseline="@+id/txtNPValue"
    android:layout_alignBottom="@+id/txtNPValue"
    android:layout_toRightOf="@+id/txtNPValue"
    android:text="+" />

<TextView
    android:id="@+id/txtNPValue"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignTop="@+id/btnMinus"
    android:layout_toRightOf="@+id/btnMinus"
    android:gravity="center"
    android:text="0"
    android:textAppearance="@style/AppBaseTheme"
    android:textSize="20dp" />

<Button
    android:id="@+id/btnMinus"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/txtNPTitle"
    android:layout_marginTop="2dp"
    android:text="-" />

</RelativeLayout>

要求是當我按下加號按鈕時,我需要增加相應的txtNPValue中的值。 與減號按鈕類似,我需要減少txtNPValue中的值。

錯誤是

01-31 22:40:10.854:E / AndroidRuntime(32198):java.lang.NullPointerException:嘗試在空對象引用上調用虛擬方法'java.lang.CharSequence android.widget.TextView.getText()'

我也不知道這是否是編寫此類要求的正確方法,並且需要一些指針。

TextView tv = (TextView) v.findViewById(R.id.txtNPValue);

這將返回空指針異常,因為您獲得的視圖是按鈕或單擊的項目。

用這個 :-

RelativeLayout rlLayout =(RelativeLayout)v.getParent();

TextView電視=(TextView)rlLayout.findViewById(R.id.txtNPValue);

請刪除:

 TextView tv = (TextView) v.findViewById(R.id.txtNPValue);

從onClick解決nullpointerException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM