猿问

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

我正在尝试使用意图将整数数据从一个活动发送到另一个类,但我的整数数据本身只是变为零。

所以我做了这个意图,将有关用户想要执行多少间隔的数据发送到创建视图组/视图持有者的类,具体取决于用户为回收器视图选择的数量。问题是 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();

            }

        });

    }



幕布斯6054654
浏览 81回答 1
1回答

慕少森

目前,您有一个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) {&nbsp; &nbsp; Intent intent = new Intent(this, TimeActivity.class);&nbsp; &nbsp; intent.putExtra(INTERVAL_COUNT, numberOfIntervals)&nbsp; &nbsp; startActivity(intent);&nbsp; &nbsp; 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) {&nbsp; &nbsp; this.mWorkTW = mWorkTW;&nbsp; &nbsp; // ...&nbsp; &nbsp; this.numberOfIntervals = numberOfIntervals;&nbsp; &nbsp; Log.d(TAG, "CustomAdapter: " + numberOfIntervals);}在 中TimeActivity,您可以int通过调用访问该值getIntent():private int numberOfIntervals;@Overrideprotected void onCreate(Bundle savedInstanceState) {&nbsp; &nbsp; super.onCreate(savedInstanceState);&nbsp; &nbsp; setContentView(R.layout.activity_time);&nbsp; &nbsp; Log.d(TAG, "onCreate: Started");&nbsp; &nbsp; numberOfIntervals = getIntent().getIntExtra(INTERVAL_COUNT, 0);&nbsp; &nbsp; Toast.makeText(this, "" + numberOfIntervals, Toast.LENGTH_LONG).show();&nbsp; &nbsp; Log.d(TAG, "" + numberOfIntervals);&nbsp; &nbsp; initializeViews();}最后,您可以按如下方式初始化RecyclerViewin :TimeActivityprivate void initializeRecyclerView() {&nbsp; &nbsp; Log.d(TAG, "initializeRecyclerView: Initialize RecyclerView");&nbsp; &nbsp; RecyclerView intervalRecyclerView = findViewById(R.id.intervalRecyclerView);&nbsp; &nbsp; CustomAdapter adapter = new CustomAdapter(this, WTV, WET, RTV, RET, numberOfIntervals);&nbsp; &nbsp; intervalRecyclerView.setAdapter(adapter);&nbsp; &nbsp; intervalRecyclerView.setLayoutManager(new LinearLayoutManager(this));}
随时随地看视频慕课网APP

相关分类

Java
我要回答