在 onActivityResult 中设置的列表,数据不粘

List set in onActivityResult with data not sticking

我需要使用从 onActivityResult 返回的数据设置一个 List 变量。然后在按下按钮时使用该列表执行操作。

如果我在 onActivityResult 中设置列​​表后立即放入 Log.d,它会正确显示列表。但是,如果我将列表的第二个 Log.d 放在 onResume 中或按下按钮时,第二个日志将列表显示为空。

不是完整代码,只有相关部分。

public class ImageSelectActivity extends AppCompatActivity {
    public static List<String> path;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_select);
    Button btnSelectImages = (Button) findViewById(R.id.btnSelect);
    btnSelectImages.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MultiImageSelector selector = MultiImageSelector.create(ImageSelectActivity.this);
            selector.count(12);
            selector.showCamera(true);
            selector.start(ImageSelectActivity.this, REQUEST_IMAGE);
        }
    });

    Button btnImagesLog = (Button) findViewById(R.id.btnImages);
    btnImagesLog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("path",""+path); //path returns null even AFTER clicking the select button and selecting images.
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_IMAGE){
        if(resultCode == RESULT_OK){
            // list of image paths
            List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);
            Log.d("images",""+path); //correctly displays path of all selected images.
        }
    }
}

你的问题是阴影:

您在该方法中声明了一个完整的列表对象:

// list of image paths
List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);

那是局部变量!因此,您不是为 ImageSelectActivity.path 赋值,而是为该局部变量赋值。 ImageSelectActivity.path 只保留其 值。

所以,答案很简单:将那行变成

// list of image paths
path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);

你应该很好。好吧,除了使用 static 变量通常不是一个好主意。

除此之外:这是真正的基本内容。如果您不知道这些事情,我建议您先 学习教育 material 的 Java 基础知识,然后再进一步参与 Android。例如:通过 Oracle tutorials 工作;至少是基本的!

您正在创建一个新的引用变量并为其分配列表

List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); 
// ^^^^^ new local variable 

所以你需要使用已经定义的变量,所以就这样做

 public static List<String> path;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_IMAGE){
        if(resultCode == RESULT_OK){
            // list of image paths
            path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);
           //^^^^ don't create a local variable , 
           //just refer the one already defined in class 
            Log.d("images",""+path);
        }
    }
}