2017-07-16 38 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

非常感謝! –