Android baseadapter中的保存值按钮增量
我有一个baseadapter和一个textview click增量值,我想通过选择SharedReference来保存增量值,但我做不到,请帮助我解决它。 非常感谢。 这是我的代码:Android baseadapter中的保存值按钮增量,android,baseadapter,Android,Baseadapter,我有一个baseadapter和一个textview click增量值,我想通过选择SharedReference来保存增量值,但我做不到,请帮助我解决它。 非常感谢。 这是我的代码: public class BaseAdapter2 extends BaseAdapter { private Context mContext; private Activity activity; private static ArrayList titre, descript
public class BaseAdapter2 extends BaseAdapter {
private Context mContext;
private Activity activity;
private static ArrayList titre, description;
private static LayoutInflater inflater = null;
private int points;
private SharedPreferences pref;
private final String PREF_NAME = "pref";
private final String POINTS = "totalPoints";
public BaseAdapter2(Activity a, ArrayList b, ArrayList desc) {
activity = a;
this.titre = b;
this.description = desc;
inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); }
public int getCount() { return titre.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if (convertView == null) { vi = inflater.inflate(R.layout.searchperso, null); } final TextView tv = (TextView) vi.findViewById(R.id.chiffre);
TextView incrementer = (TextView) vi.findViewById(R.id.incrementer);
incrementer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
points++;
tv.setText("" + points);
} });
return vi;
}
public BaseAdapter2(Context context) {
mContext = context;
pref = mContext.getSharedPreferences(PREF_NAME,0);
points = pref.getInt(POINTS,0);
SharedPreferences.Editor myEditor = pref.edit();
myEditor.putInt(POINTS, points);
myEditor.commit();
}
}```
您需要在每次单击后将数据存储在SharedReference中
public class BaseAdapter2 extends BaseAdapter {
private Context mContext;
private Activity activity;
private static ArrayList titre, description;
private static LayoutInflater inflater = null;
private int points;
private SharedPreferences pref;
private final String PREF_NAME = "pref";
private final String POINTS = "totalPoints";
public BaseAdapter2(Activity a, ArrayList b, ArrayList desc) {
activity = a;
initPrefs(a);
this.titre = b;
this.description = desc;
inflater = (LayoutInflater)
activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return titre.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.searchperso, null);
}
final TextView tv = (TextView) vi.findViewById(R.id.chiffre);
TextView incrementer = (TextView) vi.findViewById(R.id.incrementer);
incrementer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
points++;
tv.setText("" + points);
SharedPreferences.Editor myEditor = pref.edit();
myEditor.putInt(POINTS, points);
myEditor.commit();
}
});
return vi;
}
private void initPrefs(Context context){
pref = mContext.getSharedPreferences(PREF_NAME, 0);
points = pref.getInt(POINTS, 0);
}
public BaseAdapter2(Context context) {
mContext = context;
initPrefs(mContext);
}
}
您需要在每次单击后将数据存储在SharedReference中
public class BaseAdapter2 extends BaseAdapter {
private Context mContext;
private Activity activity;
private static ArrayList titre, description;
private static LayoutInflater inflater = null;
private int points;
private SharedPreferences pref;
private final String PREF_NAME = "pref";
private final String POINTS = "totalPoints";
public BaseAdapter2(Activity a, ArrayList b, ArrayList desc) {
activity = a;
initPrefs(a);
this.titre = b;
this.description = desc;
inflater = (LayoutInflater)
activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return titre.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.searchperso, null);
}
final TextView tv = (TextView) vi.findViewById(R.id.chiffre);
TextView incrementer = (TextView) vi.findViewById(R.id.incrementer);
incrementer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
points++;
tv.setText("" + points);
SharedPreferences.Editor myEditor = pref.edit();
myEditor.putInt(POINTS, points);
myEditor.commit();
}
});
return vi;
}
private void initPrefs(Context context){
pref = mContext.getSharedPreferences(PREF_NAME, 0);
points = pref.getInt(POINTS, 0);
}
public BaseAdapter2(Context context) {
mContext = context;
initPrefs(mContext);
}
}
在增量中,单击如下实现
incrementer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
points = pref.getInt(POINTS, 0); \\ When click it get previous value
points++; \\ then increment the previous valu
tv.setText("" + points); \\ Set the
SharedPreferences.Editor myEditor = pref.edit();
myEditor.putInt(POINTS, points); \\ Save current valu to the Shared Pref
myEditor.commit();
}
});
此外,您不需要在增量单击侦听器实现中使用第二个构造函数
incrementer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
points = pref.getInt(POINTS, 0); \\ When click it get previous value
points++; \\ then increment the previous valu
tv.setText("" + points); \\ Set the
SharedPreferences.Editor myEditor = pref.edit();
myEditor.putInt(POINTS, points); \\ Save current valu to the Shared Pref
myEditor.commit();
}
});
另外,您不需要第二个构造函数E/AndroidRuntime:FATAL EXCEPTION:main
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
at example.com.BaseAdapter2.getView(BaseAdapter2.java:180)
at android.widget.AbsListView.obtainView(AbsListView.java:2346)
at android.widget.ListView.makeAndAddView(ListView.java:1875)
at android.widget.ListView.fillDown(ListView.java:702)
at android.widget.ListView.fillFromTop(ListView.java:763)
at android.widget.ListView.layoutChildren(ListView.java:1670)
at android.widget.AbsListView.onLayout(AbsListView.java:2148)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.TableLayout.onLayout(TableLayout.java:445)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1732)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1497)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1166)
at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:851)
at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1172)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.`
E/AndroidRuntime:致命异常:主
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference
at example.com.BaseAdapter2.getView(BaseAdapter2.java:180)
at android.widget.AbsListView.obtainView(AbsListView.java:2346)
at android.widget.ListView.makeAndAddView(ListView.java:1875)
at android.widget.ListView.fillDown(ListView.java:702)
at android.widget.ListView.fillFromTop(ListView.java:763)
at android.widget.ListView.layoutChildren(ListView.java:1670)
at android.widget.AbsListView.onLayout(AbsListView.java:2148)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.TableLayout.onLayout(TableLayout.java:445)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1732)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1497)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1166)
at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:851)
at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1172)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)
at android.view.View.layout(View.java:16630)
at android.view.ViewGroup.layout(ViewGroup.java:5437)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.`
谢谢,但是我正在测试这段代码,我有一个错误:java.lang.NullPointerException:尝试调用接口方法'android.content.SharedReferences$Editor android.content.SharedReferences.edit()'在空对象上reference@FaHima您需要在构造函数中初始化共享首选项对象。您正在使用两个构造函数,但已在其中一个构造函数中初始化。你需要在两个构造函数中进行初始化。你能告诉我在哪里需要在代码中初始化第二个构造函数吗?谢谢。非常感谢你的帮助,但我很抱歉我总是遇到同样的问题(同样的错误)谢谢,但是我正在测试这段代码,我有一个错误:java.lang.NullPointerException:尝试调用接口方法'android.content.SharedReferences$Editor android.content.SharedReferences.edit()'在空对象上reference@FaHima您需要在构造函数中初始化共享首选项对象。您正在使用两个构造函数,但已在其中一个构造函数中初始化。你需要在两个构造函数中进行初始化。你能告诉我在哪里需要在代码中初始化第二个构造函数吗?谢谢。非常感谢你的帮助,但我很抱歉我总是遇到同样的问题(同样的错误)谢谢,我也测试了这个解决方案,但我总是遇到这样的错误:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int-android.content.SharedReferences.getInt(java.lang.String,int)”。谢谢,我也测试了这个解决方案,但我总是遇到这样的错误:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int android.content.SharedReferences.getInt(java.lang.String,int)”