在ListView中显示静态数据的种类

时间:2015-10-26 18:41:01

标签: android

我正在尝试在Activity上的每一行中创建一个带有2个TextView的ListView并填充它。关于要填充的数据ListView的事情是它不是“表”数据,这意味着记录的数量可以经常变化,但它几乎是静态的,即所有行的数量都是明确的并且在编译时是已知的。所以它非常像类型的数据

http://i.stack.imgur.com/APn7W.jpg

当在工具栏中按下某个菜单项时,我需要更新的只是每行中的第二个TextView。

我无法弄清楚如何做到这一点,因为几乎所有的例子都假设填充ListView的数据是动态的,这对我来说并非如此。

我是否仍需要创建从BaseAdapter继承的自定义适配器?和“一行xml布局”并将其放入布局?

或者我应该在这样的布局中创建ListView和所有TextViews 静态,然后从Activity中设置它们的值?

<ListView .....
  <TextView ..... />
  <TextView ..... />
  <TextView ..... />

</ListView>

3 个答案:

答案 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);