Java 如何从listview中的numberpicker获取不同项目的不同值

Java 如何从listview中的numberpicker获取不同项目的不同值,java,android,json,xml,android-studio,Java,Android,Json,Xml,Android Studio,我想通过数字选择器从用户处获取数量。我正在获取值,但一个数字选择器输入的值在所有其他数字选择器中也重复。你能帮我查一下密码吗 MainActivity.java import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget

我想通过数字选择器从用户处获取数量。我正在获取值,但一个数字选择器输入的值在所有其他数字选择器中也重复。你能帮我查一下密码吗

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends Activity implements OnClickListener {

  ListView mListView;
  Button btnShowCheckedItems;
  ArrayList<Menu> mMenus;
  MultiSelectionAdapter<Menu> mAdapter;
  HashMap<Integer,Integer> quantityList;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bindComponents();
    init();
    addListeners();
  }
  private void bindComponents() {
    // TODO Auto-generated method stub
    mListView = (ListView) findViewById(android.R.id.list);
    btnShowCheckedItems = (Button) findViewById(R.id.btnShowCheckedItems);
  }
  private void init() {
    // TODO Auto-generated method stub
    mMenus = new ArrayList<Menu>();
    mMenus.add(new Menu("Pendrive"));
    mMenus.add(new Menu("Laptop"));
    mMenus.add(new Menu("Mouse"));

    quantityList=new HashMap<Integer,Integer>();
    quantityList=null;

    mAdapter = new MultiSelectionAdapter<Menu>(this, mMenus);
    mListView.setAdapter(mAdapter);
  }
  private void addListeners() {
    // TODO Auto-generated method stub
    btnShowCheckedItems.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
    if(mAdapter != null) {
      ArrayList<Menu> mArrayMenus = mAdapter.getCheckedItems();
      Log.d(MainActivity.class.getSimpleName(), "Selected Items: " + mArrayMenus.toString());
      Toast.makeText(getApplicationContext(), "Selected Items: " + mArrayMenus.toString(), Toast.LENGTH_LONG).show();


      Toast.makeText(getApplicationContext(),"Item-qty"+quantityList.toString(),Toast.LENGTH_LONG).show();
    }
  }
}
@Override
public void onCallback(int position, int value) {
            quantityList.put(position, value);

}
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ListView
        android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_above="@+id/btnShowCheckedItems"
        />
    <Button
        android:id="@+id/btnShowCheckedItems"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Show"
        />
</RelativeLayout>

row.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp" >
    <CheckBox
        android:id="@+id/chkEnable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text=""/>
    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:text="title"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="39dp"
        android:layout_marginStart="39dp"
        android:layout_alignBottom="@+id/chkEnable"
        android:layout_toRightOf="@+id/chkEnable"
        android:layout_toEndOf="@+id/chkEnable" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:text="qty"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/tvTitle"
        android:layout_alignStart="@+id/tvTitle" />

    <NumberPicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/numberPicker"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />


</RelativeLayout>

android:layout\u width=“匹配父项”
android:layout\u height=“包装内容”
android:orientation=“水平”
android:padding=“10dp”>
1)删除quantityList=null;在MainActivity.java中

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends Activity implements OnClickListener {

  ListView mListView;
  Button btnShowCheckedItems;
  ArrayList<Menu> mMenus;
  MultiSelectionAdapter<Menu> mAdapter;
  HashMap<Integer,Integer> quantityList;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bindComponents();
    init();
    addListeners();
  }
  private void bindComponents() {
    // TODO Auto-generated method stub
    mListView = (ListView) findViewById(android.R.id.list);
    btnShowCheckedItems = (Button) findViewById(R.id.btnShowCheckedItems);
  }
  private void init() {
    // TODO Auto-generated method stub
    mMenus = new ArrayList<Menu>();
    mMenus.add(new Menu("Pendrive"));
    mMenus.add(new Menu("Laptop"));
    mMenus.add(new Menu("Mouse"));

    quantityList=new HashMap<Integer,Integer>();
    quantityList=null;

    mAdapter = new MultiSelectionAdapter<Menu>(this, mMenus);
    mListView.setAdapter(mAdapter);
  }
  private void addListeners() {
    // TODO Auto-generated method stub
    btnShowCheckedItems.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
    if(mAdapter != null) {
      ArrayList<Menu> mArrayMenus = mAdapter.getCheckedItems();
      Log.d(MainActivity.class.getSimpleName(), "Selected Items: " + mArrayMenus.toString());
      Toast.makeText(getApplicationContext(), "Selected Items: " + mArrayMenus.toString(), Toast.LENGTH_LONG).show();


      Toast.makeText(getApplicationContext(),"Item-qty"+quantityList.toString(),Toast.LENGTH_LONG).show();
    }
  }
}
@Override
public void onCallback(int position, int value) {
            quantityList.put(position, value);

}
2) 删除TextView tv=(TextView)convertView.findViewById(R.id.editText);在MultiSelectionAdapter.java中。重复代码。您已初始化为tv1

3) 在适配器中实现回调

 private AdapterCallback mAdapterCallback;

 public static interface AdapterCallback {
    void onCallback(int position, int value);
 }

 public MultiSelectionAdapter(Context context, ArrayList<T> list) {
        // TODO Auto-generated constructor stub
        this.mContext = context;
        mInflater = LayoutInflater.from(mContext);
        mSparseBooleanArray = new SparseBooleanArray();
        mList = new ArrayList<T>();
        this.mList = list;

        try {
            this.mAdapterCallback = ((AdapterCallback) context);
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement AdapterCallback.");
        }

 }

 public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

    if (newVal > 0) {

        mAdapterCallback.onCallback(position, newVal);
        tv1.setText(Integer.toString(newVal));

    }
}
1) 删除quantityList=null;在MainActivity.java中

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends Activity implements OnClickListener {

  ListView mListView;
  Button btnShowCheckedItems;
  ArrayList<Menu> mMenus;
  MultiSelectionAdapter<Menu> mAdapter;
  HashMap<Integer,Integer> quantityList;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bindComponents();
    init();
    addListeners();
  }
  private void bindComponents() {
    // TODO Auto-generated method stub
    mListView = (ListView) findViewById(android.R.id.list);
    btnShowCheckedItems = (Button) findViewById(R.id.btnShowCheckedItems);
  }
  private void init() {
    // TODO Auto-generated method stub
    mMenus = new ArrayList<Menu>();
    mMenus.add(new Menu("Pendrive"));
    mMenus.add(new Menu("Laptop"));
    mMenus.add(new Menu("Mouse"));

    quantityList=new HashMap<Integer,Integer>();
    quantityList=null;

    mAdapter = new MultiSelectionAdapter<Menu>(this, mMenus);
    mListView.setAdapter(mAdapter);
  }
  private void addListeners() {
    // TODO Auto-generated method stub
    btnShowCheckedItems.setOnClickListener(this);
  }
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
    if(mAdapter != null) {
      ArrayList<Menu> mArrayMenus = mAdapter.getCheckedItems();
      Log.d(MainActivity.class.getSimpleName(), "Selected Items: " + mArrayMenus.toString());
      Toast.makeText(getApplicationContext(), "Selected Items: " + mArrayMenus.toString(), Toast.LENGTH_LONG).show();


      Toast.makeText(getApplicationContext(),"Item-qty"+quantityList.toString(),Toast.LENGTH_LONG).show();
    }
  }
}
@Override
public void onCallback(int position, int value) {
            quantityList.put(position, value);

}
2) 删除TextView tv=(TextView)convertView.findViewById(R.id.editText);在MultiSelectionAdapter.java中。重复代码。您已初始化为tv1

3) 在适配器中实现回调

 private AdapterCallback mAdapterCallback;

 public static interface AdapterCallback {
    void onCallback(int position, int value);
 }

 public MultiSelectionAdapter(Context context, ArrayList<T> list) {
        // TODO Auto-generated constructor stub
        this.mContext = context;
        mInflater = LayoutInflater.from(mContext);
        mSparseBooleanArray = new SparseBooleanArray();
        mList = new ArrayList<T>();
        this.mList = list;

        try {
            this.mAdapterCallback = ((AdapterCallback) context);
        } catch (ClassCastException e) {
            throw new ClassCastException("Activity must implement AdapterCallback.");
        }

 }

 public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

    if (newVal > 0) {

        mAdapterCallback.onCallback(position, newVal);
        tv1.setText(Integer.toString(newVal));

    }
}

这很有趣,所以所有行都显示相同的值?我认为问题在于:
MainActivity m=newmainActivity();m、 quantityList.put(位置,新值)每次都创建一个新活动,而不是获取如下实例:
((MainActivity)getActivity()).getQuantityList.put(position,newVal)那么我应该如何解决它呢?我会首先对新的mainactivity片段进行注释,看看这是否会改变输出。我看不到任何明显优于
System.out.println(“Position:+Position+”NewVal:+NewVal”)输出这很有趣,所以所有行都显示相同的值?我认为问题在于:
MainActivity m=newmainActivity();m、 quantityList.put(位置,新值)每次都创建一个新活动,而不是获取如下实例:
((MainActivity)getActivity()).getQuantityList.put(position,newVal)那么我应该如何解决它呢?我会首先对新的mainactivity片段进行注释,看看这是否会改变输出。我看不到任何明显优于
System.out.println(“Position:+Position+”NewVal:+NewVal”)输出