加载ListView时更新划掉的项目

时间:2013-01-11 00:14:48

标签: android android-listview

我对Android编程很新,并且在从内部存储加载信息时尝试在列表视图中设置项目。

我正在使用两个全局数组:第一个是一个String数组,其中包含列表中项的名称,第二个是一个布尔数组,用于跟踪哪些项被划掉。我在列表视图中使用TextView。

main_activity.xml:

<ListView
        android:id="@+id/listViewMyList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
</ListView>

rowlayout.xml:
<TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="3dp"
    android:layout_marginBottom="3dp"
    android:text="@+id/label" />

我创建了一个onClickListener(),它成功更新了每个列表项的状态:

public class MainActivity extends Activity
{
// Initialize the list (global list values)
String[] values = new String[0]; // array of items for the list
boolean[] checkedVals = new boolean[0]; // keep track of which items are crossed-off
String localFileName = "myListData.csv";

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // read the data from file if present
    readListFromFile();        

    // find the ListView
    ListView lst = (ListView) findViewById(R.id.listViewMyList);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.rowlayout, R.id.label, values);
    lst.setAdapter(adapter);

    // define what happens on click
    lst.setOnItemClickListener(new OnItemClickListener()
    {
          public void onItemClick(AdapterView<?> parent, View view,int position, long id)
          {
              // read crossed status and set text flags for strikethrough                 
              if (checkedVals[position])
              {                   
                  TextView text1 = (TextView)view.findViewById(R.id.label);
                  text1.setPaintFlags(text1.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
                  text1.setTextColor(0xff000000);
                  checkedVals[position] = false;
              }
              else
              {
                  TextView text1 = (TextView)view.findViewById(R.id.label);
                  text1.setPaintFlags(text1.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
                  text1.setTextColor(0xff888888);
                  checkedVals[position] = true;
              }
              // save the data in a file
              saveListToFile();
          }
    });

}

因此,此代码适用于交叉和取消项目。我不知道在加载列表时如何在没有单击或任何活动的情况下划掉一些项目(由checkedVals布尔数组确定)。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您需要通过扩展ArrayAdapter并覆盖getView()来创建自定义适配器。

getView()方法加载每一行的布局,您应该检查该行是否在checkedVals数组中并使用适当的标记进行绘制。 Android首席程序员Romain Guy提供的Google Talk提供了有关如何执行此操作的最佳做​​法的大量信息。