Создание простого ListView в Android

#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 . измените это и дайте мне знать, если будут еще какие-либо ошибки..