Java 如何从listview中的numberpicker获取不同项目的不同值
我想通过数字选择器从用户处获取数量。我正在获取值,但一个数字选择器输入的值在所有其他数字选择器中也重复。你能帮我查一下密码吗 MainActivity.javaJava 如何从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
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”)代码>输出