在 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);
}
}
}
我需要使用从 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);
}
}
}