【发布时间】:2020-12-15 19:08:18
【问题描述】:
我创建了一个基本上是计数器的片段。按下时,它会更新您喝过的水杯的数量。此数据存储在 SharedPreferences 中。我也每天更新一次这个号码。 所以我在两个活动的 xml 中插入了片段:Main 和 Timer。 它在 Main 上完美运行,当我启动 TimerActivity 时它也可以工作,但是当我从 Timer 返回 Main 时,我看到我在 MainActivity 中达到的最后一个数字,它没有更新并忽略我从 TimerActivity 的点击。 我认为“this.getActivity”中的问题,但我不知道如何解决它。谢谢
片段代码:
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import com.example.fitapp.R;
import java.util.Calendar;
public class WaterBottleFragment extends Fragment {
LinearLayout waterBottle;
TextView iconName;
SharedPreferences sPref;
int counter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_water_bottle, container, false);
// Update once a day
Calendar calendar = Calendar.getInstance();
int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
sPref = this.getActivity().getSharedPreferences("startApp", Context.MODE_PRIVATE);
int lastDay = sPref.getInt("day", 0);
if(lastDay != currentDay){
SharedPreferences.Editor ed = sPref.edit();
ed.putInt("day", currentDay);
ed.commit();
counter = 0;
} else {
counter = (int) loadText();
}
waterBottle = (LinearLayout) view.findViewById(R.id.ll_water_bottle);
iconName = (TextView) view.findViewById(R.id.tv_icon_water);
iconName.setText(counter + " glasses");
waterBottle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
counter++;
iconName.setText(counter + " glasses");
saveText();
}
});
return view;
}
// Save number of glasses
private void saveText() {
sPref = this.getActivity().getSharedPreferences("water_counter", Context.MODE_PRIVATE);
SharedPreferences.Editor ed = sPref.edit();
ed.putInt("num_of_glasses", counter);
ed.commit();
Toast.makeText(this.getActivity(), "updated", Toast.LENGTH_SHORT).show();
}
// Load number of glasses
private int loadText() {
sPref = this.getActivity().getSharedPreferences("water_counter", Context.MODE_PRIVATE);
int savedCounter = sPref.getInt("num_of_glasses", 2);
return savedCounter;
}
}
【问题讨论】:
-
考虑发布一些测试用例或重现所需的其他类
标签: android android-fragments android-activity