2014-12-03 104 views
0

我有一个壁纸应用程序,其中包含一个列表视图,有图像,你选择一个图像,然后将其设置为壁纸,但我不知道如何分辨哪个项目是由用户选择然后我有一个广播接收器,所以设备上电后墙纸不会改变,但我也不知道如何告诉它哪个项目被选中。如何从列表视图中获取项目的位置?

这里是我的MainActivty:

public class Set1_Activity extends Activity { 

ImageView display; 
ListView list; 
Integer[] images = { 
     R.drawable.iv1_s, R.drawable.iv2_s, R.drawable.iv3_s, R.drawable.iv4_s, 
     ....... 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_main2); 

    display = (ImageView) findViewById(R.id.IView); 

    list = (ListView) findViewById(R.id.setOneListView); 
    HeartlessAdapter adapter = new HeartlessAdapter(this, images); 
    list.setAdapter(adapter); 

    Button setWp = (Button) findViewById(R.id.setWp); 

    list.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 

      switch(position){ 
       case 0: 
        display.setImageResource(R.drawable.iv1); 
       break; 
      case 1: 
       display.setImageResource(R.drawable.iv2); 
       break; 
      case 2: 
       display.setImageResource(R.drawable.iv3); 
       break; 
      ........ 

setWp.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      Toast WpSet = Toast.makeText(Set1_Activity.this,"Wallpaper Set", Toast.LENGTH_SHORT); 

      DisplayMetrics metrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(metrics); 
      int height = metrics.heightPixels; 
      int width = metrics.widthPixels; 
      Bitmap tempbitMap = BitmapFactory.decodeResource(getResources(), //what should I write here); 
      Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true); 
      WallpaperManager wallpaperManager = WallpaperManager.getInstance(Set1_Activity.this); 
      wallpaperManager.setWallpaperOffsetSteps(1, 1); 
      wallpaperManager.suggestDesiredDimensions(width, height); 
      try { 
       wallpaperManager.setBitmap(bitmap); 
       } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      WpSet.show(); 
     } 

    }); 

,这里是我的广播接收器:

public class BootReceiver extends BroadcastReceiver { 
private static final String TAG="BootReceiver"; 

@Override public void onReceive(Context context,Intent intent){ 
try{ 
     DisplayMetrics metrics = new DisplayMetrics(); 
     WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     windowManager.getDefaultDisplay().getMetrics(metrics); 
     int height = metrics.heightPixels; 
     int width = metrics.widthPixels; 
     Bitmap tempbitMap = BitmapFactory.decodeResource(context.getResources(), //what should i type here); 
     WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); 
     wallpaperManager.setWallpaperOffsetSteps(1, 1); 
     wallpaperManager.suggestDesiredDimensions(width, height); 
     try { 
      wallpaperManager.setBitmap(tempbitMap); 
      } catch (IOException e) { 
      e.printStackTrace(); 
     } 
}catch(Exception e){ 
    Log.e(TAG,e.toString()); 
} 
} 
} 

回答

0

为什么不使用preferences,用你的MainActivity类中这个方法来保存位置:

创建班级以保存/检索首选项值:

import android.content.Context; 

public final class Prefs { 

    public static void setWPSelected(Context context, int index_wallpaper){ 
     context.getSharedPreferences("MY_PREFS", 0).edit().putInt("wallpaper_selected", index_wallpaper).commit(); 
    } 

    public static int getWPSelected(Context context){  
     return context.getSharedPreferences("MY_PREFS", 0).getInt("wallpaper_selected", 0); 
    }  
} 

保存位置:

... 
... 
... 
list.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
       int position, long id) { 

       Prefs.setWPSelected(getApplicationContext(), position); //* Saving position 

      switch(position){ 
       case 0: 
... 
... 
... 

检索您的位置:

... 
... 
... 
@Override public void onReceive(Context context,Intent intent){ 
try{ 
     DisplayMetrics metrics = new DisplayMetrics(); 
     WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     windowManager.getDefaultDisplay().getMetrics(metrics); 
     int position = Prefs.getWPSelected(context); //*retrieving position. 
... 
... 
... 
+0

它给了很多错误,在bootreceiver类,因为我收到这些错误的第一行 - 语法错误令牌“ )“,;预计 \t - 令牌“(”语法错误;预计 \t - 为参数getWPSelected非法修改;只有最后是 \t允许 – 2014-12-04 00:27:14

+0

和第二空隙方法不能返回值 – 2014-12-04 00:27:37

+0

创建一个名为例如偏好设置类,并添加此方法;你可以调用方法Prefs.setWPSelecter(,)和Prefs.getWPSelecter(,) – Jorgesys 2014-12-04 00:30:24

相关问题