2013-03-20 2 views
3

Прямо сейчас у меня есть приложение, которое выполняет поиск и возвращает элементы в ListFragment. Я хочу быть в состоянии сделать каждый ListFragment кликабельным, таким образом, что при щелчке, новый вид деятельности начинает использовать что-то вроде этого:Запуск нового действия из ListFragment с помощью onListItemClick()

public void onListItemClick(ListView listView, View view, int position, long id) { 
    Intent i = new Intent(this, PlaceView.class); 
    startActivity(i); 
    //eventually data from the List will be passed to the new Activity... 
} 

Класс, который запускает ListFragment, что мне нужно быть интерактивными выглядит следующим образом:

public class ResultsView extends FragmentActivity { 

private ArrayAdapter<String> mAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_results_view); 

     //Receive searchTerm from MainActivity 
     Intent intent = getIntent(); 
     String searchTerm = intent.getStringExtra(MainActivity.SEARCH_TERM); 

     mAdapter = new ArrayAdapter<String>(this, R.layout.item_label_list); 

     FragmentManager  fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 

     ListFragment list = new ListFragment(); 
     ft.add(R.id.fragment_content, list); 

     // Let's set our list adapter to a simple ArrayAdapter. 
     list.setListAdapter(mAdapter); 

     FactualResponderFragment responder = (FactualResponderFragment) fm.findFragmentByTag("RESTResponder"); 
     if (responder == null) { 
      responder = new FactualResponderFragment(); 

      ft.add(responder, "RESTResponder"); 
     } 

     Bundle bundle = new Bundle(); 
     bundle.putString("search_term", searchTerm); 
     responder.setArguments(bundle); 

     ft.commit(); 
    } 

    public ArrayAdapter<String> getArrayAdapter() { 
     return mAdapter; 
    } 

    public void onListItemClick(ListView listView, View view, int position, long id) { 
     Intent i = new Intent(this, PlaceView.class); 
     startActivity(i); 
    } 

Так что мои вопросы:

1) Как я создал onListItemClick() работать с ListFragment list, что я работаю с?

2) ListView не имеет каких-либо атрибутов XML, относящихся к onClick или тому подобное. Разве это не имеет значения?

3) Где должны быть onListItemClick(), onItemClickListener() и что-нибудь еще применимое?

Благодарим за помощь.

EDIT:

Следуя совету Pramod, я сделал класс: ListFragmentClickable extends ListFragment и заселили ее со следующим:

@Override 
public void onListItemClick(ListView listView, View view, int position, long id) { 
    Intent i = new Intent(this, PlaceView.class); 
    startActivity(i); 
} 

Eclipse, говорит мне, что new Intent(this, PlaceView.class) не допускается, и что я могу только сказать, Intent i = new Intent();. Ошибка: «Конструктор Intent (ListFragmentClickable, Class) не определен». Я попытался создать экземпляр Intent, как предложил Eclipse, а затем добавил i.setClass(this, PlaceView.class) и i.setClassName(this, PlaceView.class), но это не сработало, поскольку я получил ту же ошибку.

1) Как обойти эту ошибку и переопределить метод, как планировалось?

2) Если я не могу этого сделать и должен использовать Intent i = new Intent();, как я могу сказать, в каком классе мы даже нацеливаемся?

+0

Какая именно ошибка? – JoxTraex

+0

«Конструктор Intent (ListFragmentClickable, класс ) не определен». – user2163853

+0

Является ли PlaceView активным? На основании этого нет. – JoxTraex

ответ

2

Расширить класс из списка, а затем переопределить функцию listitemclick.

+0

Спасибо, Прамод, не могли бы вы подробно остановиться на этом? Я довольно большой noob, когда дело доходит до всего этого ... – user2163853

+0

Посетите этот учебник http://www.vogella.com/articles/AndroidFragments/article.html и этот http://wptrafficanalyzer.in/blog/a -listfragment-application-in-android/ –

+0

хорошо, я понимаю, что вы говорите на самом деле. если я это сделаю, а затем создаю свой «список» из расширенного класса, а не ListFragment, начнется ли действие при нажатии? – user2163853

0
Intent i = new Intent((context),class) 

где класс является признанным типом, который работает с намерением. В частности, это Activity, Service и т. Д. Также из вашей заявки следует использовать не из инкапсулированного списка, которое вы достигаете с помощью this. Используйте getApplicationContext() или возьмите его из своего класса приложения, вам нужен действительный контекст.

Если PlaceView не является признанным типом, вы не можете делать то, что вы пытаетесь сделать.

+0

Итак, должен ли возникать контекст из ResultsView, который является активностью, в которой используется ListFragment? Я предполагаю, что я вызываю контекст в модифицированном классе ListFragment, поэтому я установил его следующим образом. Перед измененным методом onListItemClick у меня есть 'Context ctx = getApplicationContext();' но он говорит мне, что метод не определен для ListFragmentClickable ... Нужно ли мне вызывать контекст в ResultsView, а затем передать его классу ListFragmentClickable? – user2163853

+0

Вероятно, вы должны перейти в контекст к настраиваемому классу. – JoxTraex

0

вы можете легко получить контекст с помощью с помощью этого "getActivity(). GetApplicationContext()"

7

Просто попробуйте это,

Intent intent = new Intent(getActivity().getApplicationContext(), YourClassName.class); 
startActivity(Intent intent); 

Где "YourClassName" тип класса, который вы хотите звоните.

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