Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击通过布局充气器添加的按钮上的侦听器_Java_Android - Fatal编程技术网

Java 单击通过布局充气器添加的按钮上的侦听器

Java 单击通过布局充气器添加的按钮上的侦听器,java,android,Java,Android,这是我迄今为止根据对相关问题的各种回答编写的代码 在我的活动中 GridView gv = (GridView) findViewById(R.id.gridView1); MyCustomAdapter mAdapter = new MyCustomAdapter(); mAdapter.addItem("Action1"); mAdapter.addItem("Action2"); mAdapter.addItem("Action3"); gv

这是我迄今为止根据对相关问题的各种回答编写的代码

在我的活动中

    GridView gv = (GridView) findViewById(R.id.gridView1);
    MyCustomAdapter mAdapter = new MyCustomAdapter();
    mAdapter.addItem("Action1");
    mAdapter.addItem("Action2");
    mAdapter.addItem("Action3");
    gv.setAdapter(mAdapter);
<?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>
我的适配器

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 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>
私有类MyCustomAdapter扩展了BaseAdapter{
private ArrayList mData=new ArrayList();
私人停车场;
公共MyCustomAdapter(){
mInflater=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
}
公共无效附加项(最终字符串项){
mData.add(项目);
notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回mData.size();
}
@凌驾
公共字符串getItem(int位置){
返回mData.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
NumericViewHolder=新的NumericViewHolder();
if(convertView==null){
convertView=mInflater.充气(R.layout.horizontalnumberpicker,空);
holder.textView=(textView)convertView.findViewById(R.id.txtNPTitle);
holder.减号=(按钮)convertView.findViewById(R.id.btnMinus);
holder.plus=(按钮)convertView.findViewById(R.id.btnPlus);
holder.value=(TextView)convertView.findViewById(R.id.txtNPValue);
holder.minus.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图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();
如果(值>0){
值=值-1;
tv.setText(Integer.toString(value));
}
}
});
holder.plus.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
TextView tv=(TextView)v.findViewById(R.id.txtNPValue);
int value=Integer.parseInt(tv.getText().toString());
这将返回空指针异常,因为您获取的视图是按钮或单击的项目的视图

使用以下命令:-

RelativeLayout rlLayout=(RelativeLayout)v.getParent()

TextView tv=(TextView)rlLayout.findViewById(R.id.txtNPValue)

请删除:

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

从onClick到resolve nullpointerException

请在OnClickListener()中,而不是TextViee tv=v.findViewById()do TextView tv=holder.value,将主要布局和项目布局(horizontalnumberpicker)添加到问题中;您可以直接使用holder.value.setText(新增加或减少的值)@ArnabJain-如果我直接使用holder.value,我需要最终确定holder。这不允许我按预期使用holder。非常感谢Nidhin!!!这两行让我解决了两天的头痛问题!欢迎@Prem。只要试着理解为什么要写这两行。onclicklistner返回单击的视图,因此对于ue情况,它是returns按钮视图。因此,要获取TextView,您需要找到TextView的父视图,它是RelativeLayout,也是您按钮的父视图c=视图。因此,您首先找到父视图,然后使用它找到子TextView:)非常感谢Nidhin!!!这两行让我解决了两天的头痛问题!下面是一个后续问题,在用户完成所有输入并按下主活动上的保存按钮后,我如何获得这些文本框值以及相应的TXTNPTTILE值?我不太确定,我的建议是存储所有值在对象或类中。或者使用变量来指定这些插入的值。在适配器中创建一个公共方法,该方法可以在活动中使用适配器对象调用。----活动--------YOURADAPTER yAddapter=null;yAddapter=new YOURADAPTER();//在按钮\保存时单击调用此yAddapter.saveValue();-----YOURADAPTER适配器------//创建一个名为saveValue public void saveValue()的公共函数{//编写代码保存您的值}
 TextView tv = (TextView) v.findViewById(R.id.txtNPValue);