2016-10-05 22 views
0

上OnClickListener我有一個片段一個問題,就是我創建:我的片段沒有表現出通過按鈕

這裏是一個自定義列表

class CustomList extends ArrayAdapter<String> { 

    private final Activity activity; 
    private final String[] web; 
    private final Integer[] imageID; 

    CustomList(Activity activity, String[] web, Integer[] imageID){ 
     super(activity, R.layout.list_single, web); 
     this.activity = activity; 
     this.web = web; 
     this.imageID = imageID; 
    } 

    @NonNull 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.list_single, null, true); 
     TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 
     ImageView img = (ImageView) rowView.findViewById(R.id.img); 
     txtTitle.setText(web[position]); 
     img.setImageResource(imageID[position]); 
     return rowView; 
    } 
} 

這裏是一個片段:

public class BackgroundSelectFragment extends Fragment { 
     ListView list; 
     String[] web = { 
       "Clearing", 
       "Scroll", 
       "Desert", 
       "World", 
       "Old City", 
       "Clip Board", 
     } ; 
     Integer[] imageId = { 
       R.drawable.clearing, 
       R.drawable.scroll, 
       R.drawable.desert, 
       R.drawable.world, 
       R.drawable.city, 
       R.drawable.clipboard, 
     }; 

     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.listview_fragment, container, false); 
      CustomList adapter = new 
        CustomList(getActivity(), web, imageId); 
      list = (ListView) container.findViewById(R.id.list); 
      list.setAdapter(adapter); 
      list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
             int position, long id) { 
        Toast.makeText(getActivity(), "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      return view; 
     } 
} 

最後我試圖打開一個片段:

backgroundBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      FragmentManager fm = getFragmentManager(); 
      fm.beginTransaction() 
        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) 
        .show(backgroundSelectFragment) 
        .commit(); 
     } 
    }); 

我沒有得到任何錯誤,當我點擊一個按鈕什麼都沒有出現,我的片段在哪裏?當然,我初始化它在MainActivity OnCreate像:

backgroundSelectFragment = new BackgroundSelectFragment(); 

請幫助。我不知道我做錯了什麼。

回答

1

你要添加或更換您的片段到你的基本佈局視圖

fm.beginTransaction() 
       .setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out) 
       .replace(containerViewId, fragment, tag) //either use replace 
       .add(containerViewId, fragment, tag) //or add 
       .show(backgroundSelectFragment) 
       .commit(); 

其中containerViewId是你的片段應該加入 你可以找到替代(之間的差異),並添加這裏的觀點: Difference between add(), replace(), and addToBackStack()

+0

您的答案完美,但我有一個問題。碎片的最佳做法是什麼?在創建活動時像「添加」一樣初始化它們,然後在按鈕上顯示並隱藏它們? – Rodriquez

+0

歡迎您......您也可以接受我的答案......這取決於您想達到的目標......如果您只想在單擊按鈕時顯示片段,則不必添加活動創建片段。您應該只在點擊按鈕時添加它。 – tsiro

0

我覺得你的代碼錯在這裏請這個..

View view = inflater.inflate(R.layout.listview_fragment, container, false); 
     CustomList adapter = new 
       CustomList(getActivity(), web, imageId); 
     list = (ListView) **container**.findViewById(R.id.list); 

View view = inflater.inflate(R.layout.listview_fragment, container, false); 
     CustomList adapter = new 
       CustomList(getActivity(), web, imageId); 
     list = (ListView) **view** .findViewById(R.id.list); 
+0

謝謝answet,但這沒有幫助 – Rodriquez

0

嘗試使用添加或替換方法片段交易。

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.setCustomAnimations(R.anim.slide_from_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    fragmentTransaction.add(container, fragment, fragment.getClass().getSimpleName()); 
    fragmentTransaction.commit(); 

還要更改「容器」以查看您的片段類中的初始化視圖。

0

下面的代碼嘗試按鈕單擊事件

BackgroundSelectFragment bFragment = new BackgroundSelectFragment(); 
      getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_from_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right).replace(R.id.fragmentContainer, bFragment).commit(); 

裏在她的e,R.id.fragmentContainerBackgroundSelectFragment需要充值的佈局編號。