2013-08-26 1 views
0

У меня есть хватка, у которой есть заголовок с двумя кнопками и список на нем. Я хочу получать события по этим предметам. Фрагмент динамически добавляется в пользовательский интерфейс, а мое приложение - для android 16 и выше, поэтому мне не нужно использовать поддержку lib. Я решил реализовать прослушиватели кликов как с кнопками, так и с списком в MainActivity, так как они отключили поиск баз данных, и я хотел бы сохранить свои поисковые запросы в одном месте. так, я сделал основной вид деятельности, который реализует как: OnClickListener и OnItemClickListener и добавлены следующие методы:Android Fragment onClickListener не называется

public void onClick(View v) { 
Toast.makeText(getApplicationContext(), "List Click", Toast.LENGTH_SHORT).show(); 
} 
@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
Toast.makeText(getApplicationContext(), "List Click"+arg2, Toast.LENGTH_SHORT).show(); 
} 

Для вызова фрагмента я делаю:

//get a list of the data 
Fragment sideFormations=sideFragment.newInstance(list); 
sideFormations.setClickListeners(this,this); //<--important bit 
Toast.makeText(getApplicationContext(), "listeners set", Toast.LENGTH_SHORT).show(); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.side_frame,sideFormations); 
ft.commit(); 

В методе setClickListener в фраги, я установить сохранить значения, передаваемые в качестве нажмите listeners.and соответствующие разделы фраг являются:

onCreateView: //nflate the views, setAdapter for the list, ensure clickability of the views 
onStart: //assign click listeners which were passed in to the list, and to the header. 

Я до сих пор не могут поймать кликов в основной деятельности, т.е.. но без ошибок. Любые идеи будут очень приветствуемы и оценены. Спасибо.

EDIT: Добавление кода, где я определяю слушателей для представлений.

//This is the latest iteration. As I mentioned, I have tried to set these at different places in the frag's lifecycle without much success: 
public void onStart() { 
    super.onStart(); 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
      System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
      Log.d("CLICK-VIEW","List Clicked"); 
      main.onItemClick(arg0,arg1,arg2,arg3); 
     }    
    }); 
    mHeaderView.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) { 
      System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!"); 
      Log.d("CLICK-VIEW","Header Clicked"); 
      //main.onClick(v); 
     } 
    }); 
} 
+0

могли бы вы добавить свой код, в котором вы определяете слушатель взглядов? – owe

+0

@owe Привет. Благодарю. Я добавлю его сейчас. –

+0

Thats странно ... но: вы говорите, что ваш headerView состоит из двух кнопок. Вы должны добавить ClickListener для каждой кнопки, теперь кажется, что вы добавляете слушателя к макету, где находятся кнопки внутри. Plz публикует всю вашу активность и файлы xml. На самом деле не очень сложно установить слушателей на просмотр (см. Ответ Бираджа Залавадии), поэтому я думаю, что в вашем коде есть еще одна проблема. – owe

ответ

1

Вы не можете поместить слушателей для фрагмента непосредственно MainActivity.class, поскольку мнение, что создано принадлежат фрагмент и фрагмент принадлежит деятельности динамически правой? Так же случай был со мной, и я решаю, как это:

MainActivity.class

public class MainActivity extends FragmentActivity{ 

    //Create two public methods 

    public void onFragmentListClick(params whtever you want to pass){ 
    //will call from fragment when list item click 
    Toast.makeText(getApplicationContext(), "List Click", Toast.LENGTH_SHORT).show(); 
    } 

    public void onFragmentButtomClick(params whtever you want to pass){ 
    //will call from fragment when button click 
    Toast.makeText(getApplicationContext(), "Button Click", Toast.LENGTH_SHORT).show(); 
    } 
} 

Fragment.class

public class MyFragment extends Fragment{ 
    private Button b; 
    private ListView lst; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

View fragmentView = inflater.inflate(setLayoutId(), container, false); 
b = (Button)fragmentView.findViewById()  
lst = (ListView)fragmentView.findViewById()  

b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       ((MainActivity) getActivity()).onFragmentButtomClick(..); 
      } 
     }); 

     lst.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
           ((MainActivity) getActivity()).onFragmentListClick(..);   
      } 
     }); 

     return fragmentView; 
    } 
} 
+0

Эй, Biraj. Я попробовал ваше решение, и он, похоже, не работает. но, пытаясь это, я обнаружил, что моя проблема глубже. Даже обычный прослушиватель кликов, который определен точно после получения представления, не будет работать. Есть вещи, которые я должен изучить? Проклятый слушатель просто не регистрирует клики. –

 Смежные вопросы

  • Нет связанных вопросов^_^