[java] ArrayList를 사용하여 ListView 채우기?
내 Android앱 ListView은 ArrayList.
이 작업을 수행하는 데 문제가 있습니다. 누군가 코드로 나를 도울 수 있습니까?
답변
ArrayAdapterArrayList (또는 다른 컬렉션)를 레이아웃의 항목 (ListView, Spinner 등)에 맞게 조정 하는 을 통해 수행해야합니다 .
이것은 무엇 안드로이드 개발자 가이드는 말한다 :
ListAdapterA를 관리하는ListView임의의 오브젝트의 배열에 근거. 기본적으로이 클래스는 제공된 리소스 ID가 단일TextView. 더 복잡한 레이아웃을 사용하려면 필드 ID도받는 생성자를 사용하십시오. 해당 필드 ID는TextView더 큰 레이아웃 리소스에서를 참조해야 합니다.그러나
TextView는 참조되지만toString()배열의 각 개체 로 채워집니다 . 사용자 지정 개체의 목록 또는 배열을 추가 할 수 있습니다.toString()목록의 항목에 대해 표시 할 텍스트를 결정하려면 개체 메서드를 재정의하십시오 .
TextViews예를 들어 배열 표시 이외의 것을 사용ImageViews하거나toString()결과 이외의 일부 데이터 가보기를 채우도록하려면 재정 의하여getView(int, View, ViewGroup)원하는보기 유형을 반환합니다.
따라서 코드는 다음과 같아야합니다.
public class YourActivity extends Activity {
private ListView lv;
public void onCreate(Bundle saveInstanceState) {
setContentView(R.layout.your_layout);
lv = (ListView) findViewById(R.id.your_list_view_id);
// Instanciating an array list (you don't need to do this,
// you already have yours).
List<String> your_array_list = new ArrayList<String>();
your_array_list.add("foo");
your_array_list.add("bar");
// This is the array adapter, it takes the context of the activity as a
// first parameter, the type of list view as a second parameter and your
// array as a third parameter.
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
your_array_list );
lv.setAdapter(arrayAdapter);
}
}
답변
또한 ArrayAdapter 인터페이스를 찾습니다 .
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
답변
ArrayList를 사용하여 listview를 채우려면 아래 답변을 시도하십시오.
public class ExampleActivity extends Activity
{
ArrayList<String> movies;
public void onCreate(Bundle saveInstanceState)
{
super.onCreate(saveInstanceState);
setContentView(R.layout.list);
// Get the reference of movies
ListView moviesList=(ListView)findViewById(R.id.listview);
movies = new ArrayList<String>();
getMovies();
// Create The Adapter with passing ArrayList as 3rd parameter
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, movies);
// Set The Adapter
moviesList.setAdapter(arrayAdapter);
// register onClickListener to handle click events on each item
moviesList.setOnItemClickListener(new OnItemClickListener()
{
// argument position gives the index of item which is clicked
public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3)
{
String selectedmovie=movies.get(position);
Toast.makeText(getApplicationContext(), "Movie Selected : "+selectedmovie, Toast.LENGTH_LONG).show();
}
});
}
void getmovies()
{
movies.add("X-Men");
movies.add("IRONMAN");
movies.add("SPIDY");
movies.add("NARNIA");
movies.add("LIONKING");
movies.add("AVENGERS");
}
}
답변
public class Example extends Activity
{
private ListView lv;
ArrayList<String> arrlist=new ArrayList<String>();
//let me assume that you are putting the values in this arraylist
//Now convert your arraylist to array
//You will get an exmaple here
//http://www.java-tips.org/java-se-tips/java.lang/how-to-convert-an-arraylist-into-an-array.html
private String arr[]=convert(arrlist);
@Override
public void onCreate(Bundle bun)
{
super.onCreate(bun);
setContentView(R.layout.main);
lv=(ListView)findViewById(R.id.lv);
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , arr));
}
}
답변
다음은 목록보기를 구현할 수있는 방법의 예입니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//We have our list view
final ListView dynamic = findViewById(R.id.dynamic);
//Create an array of elements
final ArrayList<String> classes = new ArrayList<>();
classes.add("Data Structures");
classes.add("Assembly Language");
classes.add("Calculus 3");
classes.add("Switching Systems");
classes.add("Analysis Tools");
//Create adapter for ArrayList
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, classes);
//Insert Adapter into List
dynamic.setAdapter(adapter);
//set click functionality for each list item
dynamic.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.i("User clicked ", classes.get(position));
}
});
}
답변
