2015-01-18 2 views
0

Я столкнулся с проблемой с моим Android-приложением. Я новичок, и я, как правило, учился сам. Поэтому я пытаюсь создать MediaPlayer, и для этого мне нужно использовать фрагменты. Проблема заключается не в самом фрагменте, а в том, что мне нужно добавить дополнительные кнопки с помощью onClickListeners со стороны MediaPlayer, и мое приложение сбой, потому что файл fragment_main.xml имеет параметры компоновки, но я не могу использовать функцию OnClickListener во Фрагменте (Я получаю сообщение об ошибке при findViewById (не может сделать статическую ссылку на не-статический метод). Пожалуйста, помогите мне.Дополнительный код Android Fragments

public class MainActivity extends Activity { 

Button blade; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 


     /* blade = (Button)findViewById(R.id.fantab); 
      blade.setOnClickListener(new OnClickListener(){ 
       @Override 
       //On click function 
       public void onClick(View view) { 
        //Create the intent to start another activity 
        Intent vent = new Intent(MainActivity.this,  Ventscreen.class); 
        startActivity(vent); 
        finish(); 
       } 
      }); 

    */  
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends ListFragment { 

    private static final String[] FROM = { MediaStore.Audio.Media.TITLE }; 
     private static final int[] TO = { android.R.id.text1 }; 
     private CursorAdapter mAdapter; 
     Button blade; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_main, container, false); 
      return view; 
      blade = (Button)findViewById(R.id.fantab); 
      blade.setOnClickListener(new OnClickListener(){ 
       @Override 
       //On click function 
       public void onClick(View view) { 
        //Create the intent to start another activity 
        Intent vent = new Intent(MainActivity.this, Ventscreen.class); 
        startActivity(vent); 
        finish(); 
       } 
      }); 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      Context context = getActivity(); 
      int layout = android.R.layout.simple_list_item_1; 
      Cursor cursor = context.getContentResolver().query(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
        null, 
        null, 
        null, 
        MediaStore.Audio.Media.TITLE + " ASC"); 
      int flags = 0; 
      mAdapter = new SimpleCursorAdapter(context, layout, cursor, FROM, TO, flags); 

     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) 
     { 
      super.onActivityCreated(savedInstanceState); 

      setListAdapter(mAdapter); 
      getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
      mAdapter.notifyDataSetChanged(); 
     } 
    } 
    } 

это не только одна кнопка, код выше всего, например, должно быть пять кнопок в общая. Спасибо.

ответ

0
blade = (Button)findViewById(R.id.fantab); 

Вы пытаетесь вызвать findViewById(int) метод внешнего Activity. Это невозможно, искренне ваш внутренний класс Fragment статичен. То, что вы хотите сделать, это вызов findViewById(int) на FragmentView:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_main, container, false); 
    blade = (Button) view.findViewById(R.id.fantab); 
    blade.setOnClickListener(new OnClickListener(){ 
     @Override 
     //On click function 
     public void onClick(View view) { 
      //Create the intent to start another activity 
      Intent vent = new Intent(getActivity(), Ventscreen.class); 
      getActivity().startActivity(vent); 
      getActivity().finish(); 
     } 
    }); 
    return view; 
} 

Кроме того, обратите внимание на размещение return view; заявления.

+0

Я изменил код, как вы предложили, и теперь есть две ошибки в «MainActivity.this» и «finish()». Пожалуйста, помогите мне. – bgilca

+0

Я изменил ответ. Также читайте http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html – nhaarman

+0

Спасибо, похоже, что он решил проблему, еще не получил возможности проверить ее. – bgilca