我的应用程序中有一个 ListView,其中包含在不同时间发生的事件。
在我的 ListView 中,我想显示它们按时间排序,左侧的时间。
| 12:00 | Event1
| 13:00 |
| 14:00 | Event2
| 15:00 | Event2
| 16:00 | Event3
类似的东西,任何人都可以提供从哪里开始的建议吗?
您必须创建自己的适配器来扩展 BaseAdapter 并在其上创建将用于每一行的特定布局文件!
假设你有一个Map<String,String> mMap = new HashMap<String,String>
,里面有事件,另一个位置是事件的时间。
然后你创建你的新适配器,假设它是 MyAdapter。
MyAdapter mAdapter = new MyAdapter(mMap);
.setAdapter()
您可以通过调用该方法将适配器添加到您的 ListView 。
例如。myListView.setAdapter(MyAdapter);
在您的自定义适配器中,您将必须实现一些方法。其中有getView()
.
在那里,您必须解析HashMap<String,String>
传递给适配器的数据。在您的 row_layout.xml 中,您必须使用相对布局并添加适当的文本字段以显示您想要的信息!
希望能帮助到你!!!
也检查这个链接:http ://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/
通常,您的列表适配器使用某种数据结构或容器来存储其对象。如果需要添加新元素,先将其添加到容器中,对其元素进行排序,然后调用
adapter.notifyDataSetChanged();
让它知道其数据已更改并需要更新。
这只是一个小例子,可以引导您朝着正确的方向前进。我希望你会发现它有用。
定义您的 ListActivity:
package com.myapp.listviewexample;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ListViewExampleActivity extends ListActivity {
static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan"
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
final MyListAdapter adapter = new MyListAdapter(this, COUNTRIES);
setListAdapter(adapter);
ListView lv = getListView();
//lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
adapter.removeItem(position);
adapter.notifyDataSetChanged();
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText() + " removed",
Toast.LENGTH_SHORT).show();
}
});
}
}
定义您的列表适配器:
package com.myapp.listviewexample;
import java.util.ArrayList;
import java.util.Arrays;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyListAdapter extends BaseAdapter {
private ArrayList<String> items;
private Context mContext;
public MyListAdapter(Context c, String[] countries) {
items = new ArrayList<String>(Arrays.asList(countries));
mContext = c;
Log.i("MyListAdapter", "countries.length == items.size() " + (countries.length == items.size()));
}
public int getCount() {
return items.size();
}
public Object getItem(int position) {
return items.get(position);
}
public long getItemId(int position) {
return position;
}
public void removeItem(int position) {
items.remove(position);
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) { // if it's not recycled, initialize some attributes
LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.list_item, null);
} else {
view = convertView;
}
TextView tv = (TextView) view;//.findViewById(R.id.text_view_item);
tv.setText(items.get(position));
return view;
}
}
考虑为适配器使用 ViewHolder 模式,以避免不必要的视图膨胀。这篇文章可能会有所帮助: 如何使我的 ArrayAdapter 遵循 ViewHolder 模式?
定义你的 list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text_view_item"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
您只需要在列表元素中定义另一个 TextView 以满足您的需要。不要忘记通过 addElement(..) 方法扩展您的适配器,该方法会将元素添加到 ArrayList(在本例中),然后使用 Collections.sort(..) 对其进行排序。考虑使用一对两个字符串,它必须实现 Comparable,这样您就可以根据时间甚至更复杂的东西进行排序。