2013-05-02 22 views
6

tôi có phương pháp tĩnh này:findViewById bên trong một Static Method

public static void displayLevelUp(int level, Context context) { 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View layout = inflater.inflate(R.layout.custom_level_coast, 
      (ViewGroup) findViewById(R.id.toast_layout_root)); // this row 

    TextView text = (TextView) layout.findViewById(R.id.toastText); 
    text.setText("This is a custom toast"); 

    Toast toast = new Toast(context); 
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
    toast.setDuration(Toast.LENGTH_LONG); 
    toast.setView(layout); 
    toast.show(); 

    Toast.makeText(context, String.valueOf(level), Toast.LENGTH_SHORT) 
      .show(); 

} 

Tuy nhiên, tôi không thể tìm ra cách để có được những findViewById đầu tiên để chơi thoải mái với điều này vì nó nói nó là một phương pháp không tĩnh . Tôi hiểu tại sao nó lại nói thế, nhưng phải có cách giải quyết khác? Tôi đã vượt qua context vào phương pháp này nhưng không thể làm việc cùng nhau.

+2

Bạn không cần truyền đối tượng ngữ cảnh, nhưng đối tượng xem. Một trong đó là giữ quan điểm của bạn – edoardotognoni

+1

Tại sao không chỉ làm cho xem một lớp rộng biến và truy cập nó theo cách đó – tyczj

+0

@Wamasa Đó là câu trả lời đúng .. đăng nó – Pragnani

Trả lời

6

Một điều bạn có thể làm là biến chế độ xem thành lớp và sử dụng biến đó. Tôi không thực sự khuyên bạn nên làm điều đó nhưng nó sẽ làm việc nếu bạn cần một cái gì đó nhanh chóng và bẩn.

Việc chuyển trong chế độ xem làm tham số sẽ là cách ưa thích

+0

Cảm ơn, không thể tin rằng tôi không nghĩ về điều này. – KickingLettuce

2

hơi lạ một chút. Nhưng bạn có thể vượt qua chế độ xem gốc làm tham số.

//some method... 
ViewGroup root = (ViewGroup) findViewById(R.id.toast_layout_root); 
displayLevelUp(level, context, root); 
//some method end... 


public void displayLevelUp(int level, Context context, ViewGroup root) { 

LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

View layout = inflater.inflate(R.layout.custom_level_coast, 
     root); 

TextView text = (TextView) layout.findViewById(R.id.toastText); 
text.setText("This is a custom toast"); 

Toast toast = new Toast(context); 
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
toast.setDuration(Toast.LENGTH_LONG); 
toast.setView(layout); 
toast.show(); 

Toast.makeText(context, String.valueOf(level), Toast.LENGTH_SHORT) 
     .show(); 

} 
1

Nếu bạn muốn gắn bó với một tĩnh Hoạt động phương pháp sử dụng thay vì bối cảnh như tham số và làm một activity.findViewById như vậy:

public static void displayLevelUp(int level, Activity activity) { 
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View layout = inflater.inflate(R.layout.toastText, (ViewGroup) activity.findViewById(R.id.abs__action_bar_container)); // this row 

Một cách khác để làm điều đó là để vượt qua ViewGroup mẹ làm thông số thay vì một Ngữ cảnh hoặc Hoạt động:

public static void displayLevelUp(int level, ViewGroup rootLayout) { 
    View layout = rootLayout.inflate(rootLayout.getContext(), R.layout.custom_level_coast, rootLayout.findViewById(R.id.toast_layout_root)); // this row