2017-07-16 36 views
0

我做了一个AsyncTask,使用位图从文件更改设备壁纸,但我有多个不同的按钮,需要做同样的事情(从文件更改壁纸),但与为每个按钮使用不同的文件名(用作壁纸)。使用变量从AsyncTask活动

所以可以在启动AsyncTask的代码中包含一些内容,告诉它哪个文件要查找哪个文件对每个按钮都是不同的。

我很新这个,所以任何帮助表示赞赏。

上的一颗扣子:

Button setwallpaper1button = (Button) myView.findViewById(R.id.setwallpaper1button); 
    setwallpaper1button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(!new File(Environment.getExternalStorageDirectory().toString() + "/Directory/Wallpaper_1.jpg").exists()) { 
       Snackbar.make(myView, "Please Download Wallpaper First.", Snackbar.LENGTH_LONG).show(); 
      } 
      else { 
       new SetWallpaperTask(getActivity()).execute(// I think something needs to go here //); 
      } 
     } 
    }); 

从的AsyncTask:

所有的
@Override 
protected String doInBackground(String... args) { 
     bmImg = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + "/Directory/" + "// This is where the variable thats different for each button needs to go //"); 
    return null; 
    } 
+0

你需要有某种类似'名单名....数据集文件名的'然后每个按钮都会有专门的索引,使您可以在需要时从数据集中获取文件名。 – Enzokie

回答

1

首先,你需要映射资源到屏幕上的按钮。让我们假设你在屏幕上有三个按钮。

button1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    String imageName = "Wallpaper_1.jpg"; 
     if(!new File(Environment.getExternalStorageDirectory().toString() + "/Directory/"+imageName).exists()) { 
      Snackbar.make(myView, "Please Download Wallpaper First.", Snackbar.LENGTH_LONG).show(); 
     } 
     else { 
      new SetWallpaperTask(getActivity()).execute(imageName ); 
     } 
    } 
}); 

button2.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    String imageName = "Wallpaper_2.jpg"; 
     if(!new File(Environment.getExternalStorageDirectory().toString() + "/Directory/"+imageName).exists()) { 
      Snackbar.make(myView, "Please Download Wallpaper First.", Snackbar.LENGTH_LONG).show(); 
     } 
     else { 
      new SetWallpaperTask(getActivity()).execute(imageName ); 
     } 
    } 
}); 

然后在您的AsyncTask的doInBackground

@Override 
protected String doInBackground(String... args) { 
    bmImg = 
BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + "/Directory/" + args[0]); 
return null; 
} 
+0

非常感谢! –