为了账号安全,请及时绑定邮箱和手机立即绑定

我在有意发送整数数据时遇到了一些麻烦。(安卓)

我在有意发送整数数据时遇到了一些麻烦。(安卓)

幕布斯6054654 2023-04-26 14:47:18
我正在尝试使用意图将整数数据从一个活动发送到另一个类,但我的整数数据本身只是变为零。所以我做了这个意图,将有关用户想要执行多少间隔的数据发送到创建视图组/视图持有者的类,具体取决于用户为回收器视图选择的数量。问题是 int 自动变成零,导致回收列表没有被创建。我试图用一个随机数制作列表并且它有效,所以那部分代码没有错。此外,经过一些调试后,我将问题缩小到 getintent 部分,因为在我发送数据之前,数字是正确的,但在我发送数据之后,数字总是变成零。public class MainActivity extends AppCompatActivity {    Button decrementButton;    TextView intervalCountTextView;    Button incrementButton;    int intervalCount = 0;    Button intervalButtonSetter;    private int numberOfIntervals = 0;    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        decrementButton = findViewById(R.id.decrementButton);        intervalCountTextView = findViewById(R.id.intervallCount);        incrementButton = findViewById(R.id.incrementButton);        intervalButtonSetter = findViewById(R.id.intervalButtonSetter);        decrementButton.setVisibility(View.INVISIBLE);        decrementButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                intervalCount--;                intervalCountSetter();            }        });        // make sure you can't decrement past zero        incrementButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                intervalCount++;                intervalCountSetter();            }        });        intervalButtonSetter.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                sendDataToAdapter();            }        });    }
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

目前,您有一个Intent局部变量,其中sendDataToAdapter()获取间隔数作为额外的。由于您不对 this 执行任何其他操作Intent,一旦该方法完成,它将被垃圾收集,额外的内容将无法从该方法之外的任何地方访问。


在 中startTimeActivity(),您实例化一个新Intent的开始TimeActivity。这Intent没有任何额外功能。但这是Intentwhose extras 将传递给的TimeActivity。


因此,为了将间隔数作为额外的正确值Intent,您可以将参数numberOfIntervals添加到startTimeActivity() (请注意我使用的是字符串常量以避免错别字引起的错误)


public static final String INTERVAL_COUNT = "INTERVAL_COUNT";


private void startTimeActivity(int numberOfIntervals) {

    Intent intent = new Intent(this, TimeActivity.class);

    intent.putExtra(INTERVAL_COUNT, numberOfIntervals)

    startActivity(intent);

    Log.d(TAG, "startTimeActivity: TimeActivity has been started" + numberOfIntervals);

}

由于您需要知道 中的间隔数CustomAdapter,因此可以向构造函数添加另一个参数:


public CustomAdapter(Context context, ArrayList<Integer> mWorkTW, ArrayList<Integer> mWorkET, ArrayList<Integer> mRestTW, ArrayList<Integer> mRestET, int numberOfIntervals) {

    this.mWorkTW = mWorkTW;

    // ...

    this.numberOfIntervals = numberOfIntervals;

    Log.d(TAG, "CustomAdapter: " + numberOfIntervals);

}

在 中TimeActivity,您可以int通过调用访问该值getIntent():


private int numberOfIntervals;


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_time);

    Log.d(TAG, "onCreate: Started");

    numberOfIntervals = getIntent().getIntExtra(INTERVAL_COUNT, 0);

    Toast.makeText(this, "" + numberOfIntervals, Toast.LENGTH_LONG).show();

    Log.d(TAG, "" + numberOfIntervals);

    initializeViews();

}

最后,您可以按如下方式初始化RecyclerViewin :TimeActivity


private void initializeRecyclerView() {

    Log.d(TAG, "initializeRecyclerView: Initialize RecyclerView");

    RecyclerView intervalRecyclerView = findViewById(R.id.intervalRecyclerView);

    CustomAdapter adapter = new CustomAdapter(this, WTV, WET, RTV, RET, numberOfIntervals);

    intervalRecyclerView.setAdapter(adapter);

    intervalRecyclerView.setLayoutManager(new LinearLayoutManager(this));

}


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信