#android #xml #listview
#Android #xml #listview
Вопрос:
Это мое MenuFragment
. В этом у меня есть ListView
, и здесь у меня нет никаких ошибок.
package info.androidhive.tabsswipe;
import dk.appografen.joeandthejuice.R;
import java.util.ArrayList;
import java.util.Arrays;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MenuFragment extends Fragment{
private ListView mainListView ;
private ArrayAdapter<String> listAdapter ;
View rootView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
rootView = inflater.inflate(R.layout.menukort, container,
false);
return rootView;
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Find the ListView resource.
mainListView = (ListView) rootView.findViewById( R.id.mainListView );
// Create and populate a List of planet names.
String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune"};
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll( Arrays.asList(planets) );
// Create ArrayAdapter using the planet list.
getActivity();
// Add more planets. If you passed a String[] instead of a List<String>
// into the ArrayAdapter constructor, you must not add more items.
// Otherwise an exception will occur.
listAdapter.add( "Ceres" );
listAdapter.add( "Pluto" );
listAdapter.add( "Haumea" );
listAdapter.add( "Makemake" );
listAdapter.add( "Eris" );
// Set the ArrayAdapter as the ListView's adapter.
mainListView.setAdapter( listAdapter );
}
}
Ответ №1:
Ну, я вижу, что вы расширили Activity
, а не расширили Fragment
. первое, что вам нужно сделать, это изменить эту строку public class MenuFragment extends Activity
на public class MenuFragment extends Fragment
. теперь следующие шаги немного сложнее, потому что вам нужно переместить часть вашего кода в onCreateView()
метод, а часть onViewCreated
— из onCreate
метода. Мне нравится делать это следующим образом: сначала в вашем onCreateView
методе просто раздуйте фрагмент, используя LayoutInflater, а затем выполните все другие действия, такие как установка адаптеров, создание экземпляров виджетов или вложенных представлений (listview, gridview и т. Д.) В onViewCreated
методе. Ваш код будет выглядеть примерно так, как показано ниже.
package info.androidhive.tabsswipe;
import dk.appografen.joeandthejuice.R;
import java.util.ArrayList;
import java.util.Arrays;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MenuFragment extends Fragment{
private ListView mainListView ;
private ArrayAdapter<String> listAdapter ;
View rootView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
rootView = inflater.inflate(R.layout.menukort, container,
false);
return rootView;
}
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Find the ListView resource.
mainListView = (ListView) rootView.findViewById( R.id.mainListView );
// Create and populate a List of planet names.
String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune"};
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll( Arrays.asList(planets) );
// Create ArrayAdapter using the planet list.
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList);
// Add more planets. If you passed a String[] instead of a List<String>
// into the ArrayAdapter constructor, you must not add more items.
// Otherwise an exception will occur.
listAdapter.add( "Ceres" );
listAdapter.add( "Pluto" );
listAdapter.add( "Haumea" );
listAdapter.add( "Makemake" );
listAdapter.add( "Eris" );
// Set the ArrayAdapter as the ListView's adapter.
mainListView.setAdapter( listAdapter );
}
}
Комментарии:
1. Привет. Я попробовал то, что вы сказали, и импортировал то, что мне было нужно. Теперь я получил ошибку в этом: ListAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList); Говоря: конструктор ArrayAdapter<String>(MenuFragment, int, ArrayList<String>) не определен
2. измените
this
getActivity()
и повторите попытку. дайте мне знать, если это сработает.3. getActivity() исправил ошибку. Но в моем TabsPagerAdapter я все еще получаю сообщение об ошибке: return new MenuFragment(); Как раньше?
4. используете ли вы библиотеку поддержки? как если бы appcompat-v7 или v4? если да, то вам нужно импортировать
import android.support.v4.app.Fragment
неimport android.app.Fragment
5. okk я вижу, что вы используете TabsPagerAdapter, поэтому вы должны использовать библиотеку поддержки appcompat, и в этом случае все ваши фрагменты необходимо импортировать
android.support.v4.app.Fragment
. измените это и дайте мне знать, если будут еще какие-либо ошибки..