繁体   English   中英

在Java中的两个活动之间传递值

[英]pass value between two activities in java

我正在尝试将一个Activity(LensActivity)中的ArrayList中的值传递给MainActivity上的TextView。 在此站点上,我找到了Intent方法并进行了尝试,但似乎无法通过它,该信息已在String lensString中获取,并传递给了Intent,但在Main Activity中似乎没有传递或进入该方法。 TextView,在一些实验中,由于getIntent位于MainActivity上,因此我得到了一个空指针。

这是LensActivity的代码,其中包含发送信息的按钮。

    package com.komorebiestudio.cam_report_funcionality;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class LensActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private LensAdapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    private TextView LensChange;
    private String lensString;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lens_activity);

        Intent lensIntent = new Intent(LensActivity.this,MainActivity.class);
        lensIntent.putExtra("LensIntent",lensString);


        final ArrayList <LensItem> lensList = new ArrayList<>();
        lensList.add(new LensItem(R.drawable.zeiss,"24mm","Zeiss Compact Prime"));
        lensList.add(new LensItem(R.drawable.ic_camera,"35mm","Angenieux"));
        lensList.add(new LensItem(R.drawable.cooke,"50mm","Cooke S5I"));

        mRecyclerView = findViewById(R.id.lens_list);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new LensAdapter(lensList);
        LensChange = findViewById(R.id.lensinfo);

        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);

        final Intent ChangeLens = new Intent(this, MainActivity.class);

        mAdapter.setOnItemClickListener(new LensAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
               //Crea String con la informacion de posicion y texto del lente
                String lensPosition = lensList.get(position).getLens();
                lensString = lensPosition;
                Toast.makeText(getApplicationContext(),"this is " + lensString , Toast.LENGTH_SHORT).show();
                startActivity(new Intent(LensActivity.this,MainActivity.class));
            }
        });

    }




}

这是接收它的MainActivity的代码。

    package com.komorebiestudio.cam_report_funcionality;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements FpsDialog.FpsDialogListener{

    private TextView textViewinfo1;
    private Button button1;
    private  Button lensButton;
    private TextView lensInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        lensInfo = findViewById(R.id.lensinfo);
        lensInfo.setText(getIntent().getStringExtra("LensIntent"));
        textViewinfo1 = findViewById(R.id.info1);
        button1 = findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view) {
                openDialog();
            }
        });
        lensButton = findViewById(R.id.lensbutton);
        lensButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,LensActivity.class));
            }
        });
    }


    public void openDialog(){
        FpsDialog fps_dialog = new FpsDialog();
        fps_dialog.show(getSupportFragmentManager(),"Fps Dialog");

    }

    @Override
    public void applyText(String fpsinfo) {
        textViewinfo1.setText(fpsinfo);

    }




}

在LensActivity中,您正在创建一个从未使用过的Intent。 目的是这样的:

Intent lensIntent = new Intent(LensActivity.this,MainActivity.class);
lensIntent.putExtra("LensIntent",lensString);

而是应在“项目单击侦听器”中创建它。 只需删除上面的代码,然后以这种方式修改侦听器:

mAdapter.setOnItemClickListener(new LensAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {
           //Crea String con la informacion de posicion y texto del lente
            String lensPosition = lensList.get(position).getLens();
            lensString = lensPosition;
            Intent lensIntent = new Intent(LensActivity.this,MainActivity.class);
            lensIntent.putExtra("LensIntent",lensString);
            Toast.makeText(getApplicationContext(),"this is " + lensString , Toast.LENGTH_SHORT).show();
            startActivity(lensIntent);
        }
    });

给变量lensString赋值后,需要使用putExtra方法

mAdapter.setOnItemClickListener(new LensAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {
           //Crea String con la informacion de posicion y texto del lente
            String lensPosition = lensList.get(position).getLens();
            lensString = lensPosition;
            lensIntent.putExtra("LensIntent",lensString);
            Toast.makeText(getApplicationContext(),"this is " + lensString , Toast.LENGTH_SHORT).show();
            // Notice that you are not using your previously created intent in you 
            // original code.  
            startActivity(lensIntent);
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM