我正在尝试在Activity上的每一行中创建一个带有2个TextView的ListView并填充它。关于要填充的数据ListView的事情是它不是“表”数据,这意味着记录的数量可以经常变化,但它几乎是静态的,即所有行的数量都是明确的并且在编译时是已知的。所以它非常像类型的数据
当在工具栏中按下某个菜单项时,我需要更新的只是每行中的第二个TextView。
我无法弄清楚如何做到这一点,因为几乎所有的例子都假设填充ListView的数据是动态的,这对我来说并非如此。
我是否仍需要创建从BaseAdapter继承的自定义适配器?和“一行xml布局”并将其放入布局?
或者我应该在这样的布局中创建ListView和所有TextViews 静态,然后从Activity中设置它们的值?
<ListView .....
<TextView ..... />
<TextView ..... />
<TextView ..... />
</ListView>
答案 0 :(得分:3)
我基于我从描述中理解的内容做了一个简单的例子。这是完整的代码:
MainActivity.java
package com.example.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static com.example.myapplication.R.array.staticText1Elements;
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
ListView myListView = (ListView) findViewById(R.id.listViewId);
List<String> dynamicText2Elements;
dynamicText2Elements = new ArrayList<String>();
dynamicText2Elements.add("element1 of text2");
dynamicText2Elements.add("element2 of text2");
dynamicText2Elements.add("element3 of text2");
dynamicText2Elements.add("element4 of text2");
dynamicText2Elements.add("element5 of text2");
List<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> element;
int length = getResources().getStringArray(staticText1Elements).length;
for (int i = 0; i < length; i++) {
element = new HashMap<String, String>();
element.put("text1", getResources().getStringArray(staticText1Elements)[i]);
element.put("text2", dynamicText2Elements.get(i));
dataList.add(element);
}
ListAdapter myAdapter = new SimpleAdapter(this, dataList, android.R.layout.simple_expandable_list_item_2, new String[]{"text1", "text2"}, new int[]{android.R.id.text1, android.R.id.text2});
myListView.setAdapter(myAdapter);
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/listViewId"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
的strings.xml
<resources>
<string name="app_name">My Application</string>
<array name="staticText1Elements">
<item>GPS version</item>
<item>Wi-FI version</item>
<item>Bluetooth version</item>
<item>Touch panel version</item>
<item>Battery version</item>
</array>
</resources>
答案 1 :(得分:2)
您需要一个适配器来填充列表视图,在您设置两个textview的适配器内,并在java中使用静态数组字符串资源或数组字符串填充列表视图,请参阅此链接Populating a ListView using an ArrayList?
答案 2 :(得分:1)
这是适配器
public class AdapterAlumnos extends ArrayAdapter<Object> {
private LayoutInflater inflate;
private List<Object> listSolcitudes;
Context context;
public AdapterAlumnos(Context context, List<Object> listSolcitudes) {
super(context, R.layout.item_estudiante, listSolcitudes);
inflate = LayoutInflater.from(context);
this.listSolcitudes = listSolcitudes;
this.context = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = inflate.inflate(R.layout.item_estudiante, parent, false);
TextView txtNombreEstudianteItem = (TextView) convertView.findViewById(R.id.txtNombreEstudianteItem);
TextView txtGradoEstudianteItem = (TextView) convertView.findViewById(R.id.txtGradoEstudianteItem);
HashMap<String, Object> obj = (HashMap<String, Object>) getItem(position);
String genero = (String) obj.get("YourKEY");
txtNombreEstudianteItem.setText(nombre);
活动中的
ArrayList arrayArray = new ArrayList<Object>(); // your list key-value
adapter = new AdapterAlumnos(getApplicationContext(),arrayArray);
ListView listEstudiantes =(ListView)findViewById(R.id.listEstudiantes);
listEstudiantes.setAdapter(adapter);