android对我来说是新的.我正在尝试在1.5平台上开发一个程序但仍在进行中,plz指导我.
我有以下格式的一些信息
"item1","description1"
"item2","description2"
"item3","description3"
"item4","description4"
.
.
.
.
Run Code Online (Sandbox Code Playgroud)
我想在屏幕上显示它们,我不知道哪种方法可以做到这一点.谷歌之后我发现了2种方法.但我没有成功实施任何一个.
方法1
我将两列数据分成两个不同的数组,然后使用第1列的数组填充listactivity,启用过滤器和点击的事件我想提出警告,应该显示文本点击倾斜和desc从第二个数组作为基于位置的消息体.但是如果使用过滤器索引变成重新初始化,这里有问题:-(并且没有找到另一种方法来获取该行的文本.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, Names));
getListView().setTextFilterEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
public void onListItemClick(ListView parent, View v, int position, long id) {
Builder builder = new AlertDialog.Builder(this);
builder.setTitle(Names[position]);
builder.setMessage(description[position] + " -> " + position );
builder.setPositiveButton("ok", null);
builder.show();
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
如果使用过滤器,它不会从位置选择正确的项目:-(,plz guide你可以分享这个的源代码
方法B.
在这里,我尝试从XML生成列表行,但给出1.5 jar文件不允许修改的错误:-(
public View getView(int position, View convertView, ViewGroup parent) {
/*
ViewInflate inflater=context.getViewInflate();
View row=inflater.inflate(R.layout.row, null, null);
*/
View row = (View) convertView;
if (row==null) {
LayoutInflater inflater=context.getLayoutInflater();
// LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row,null);
}
TextView label=(TextView)row.findViewById(R.id.label);
label.setText(items[position]);
TextView description=(TextView)row.findViewById(R.id.description);
description.setText(items[position]);
// ImageView icon=(ImageView)row.findViewById(R.id.icon);
// icon.setImageResource(R.drawable.delete);
return(row);
}
Run Code Online (Sandbox Code Playgroud)
Plz建议什么是正确的方法来实现这个,所以应用程序可以显示项目的desc,也有过滤器.Plz share如果你有任何shouce代码
您选择的解决方案严格取决于您的需求.我将尝试收集需求并为您提供我认为最合适的实现.
好的,所以我们列举一些要求:
值得一提的是:
- 如果您需要显示自定义数据,并且它不仅仅是字符串的向量,那么最好提供自己的数据类型.将所有行数据保存在一个位置非常方便,即使某些数据未显示在列表中也是如此.反映您的示例:您有"项目"和"描述" - 您可能只想显示"项目",但您希望有可能获得描述.保持在一个类的实例.在下面的示例中,它是RowData类.请参阅RowData类.
- 如果你想要一个自定义布局,而且它不仅仅是一个TextView,那么你应该实现自己的适配器 - 可能是ArrayAdapter的子类.请查看CustomAdapter类.
- 如果需要过滤列表并使用自定义数据类型 - 请为您的类型提供toString()方法.多亏了这种方法,您将能够使用内置Filter类.它的职责是过滤掉列表中与您输入的文本不匹配的项目.它只是从适配器中获取项目的文本表示,并将其与过滤器一起使用.请参阅RowData类中的toString()方法.
- 如果项目列表可能很长,那么最好的方法是重用行视图并使用包装器模式.请参阅getView()方法和ViewHolder类.
public class CustomList extends ListActivity {
private LayoutInflater mInflater;
private Vector data;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
data = new Vector();
RowData rd = new RowData("aaa", "description1");
data.add(rd);
rd = new RowData("bbb", "description2");
data.add(rd);
rd = new RowData("ccc", "description3");
data.add(rd);
CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.item, data);
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
}
public void onListItemClick(ListView parent, View v, int position, long id) {
CustomAdapter adapter = (CustomAdapter) parent.getAdapter();
RowData row = adapter.getItem(position);
Builder builder = new AlertDialog.Builder(this);
builder.setTitle(row.mItem);
builder.setMessage(row.mDescription + " -> " + position );
builder.setPositiveButton("ok", null);
builder.show();
}
/**
* Data type used for custom adapter. Single item of the adapter.
*/
private class RowData {
protected String mItem;
protected String mDescription;
RowData(String item, String description){
mItem = item;
mDescription = description;
}
@Override
public String toString() {
return mItem + " " + mDescription;
}
}
private class CustomAdapter extends ArrayAdapter {
public CustomAdapter(Context context, int resource,
int textViewResourceId, List objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//widgets displayed by each item in your list
TextView item = null;
TextView description = null;
//data from your adapter
RowData rowData= getItem(position);
//we want to reuse already constructed row views...
if(null == convertView){
convertView = mInflater.inflate(R.layout.custom_row, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
//
holder = (ViewHolder) convertView.getTag();
item = holder.getItem();
item.setText(rowData.mItem);
description = holder.getDescription();
description.setText(rowData.mDescription);
return convertView;
}
}
/**
* Wrapper for row data.
*
*/
private class ViewHolder {
private View mRow;
private TextView description = null;
private TextView item = null;
public ViewHolder(View row) {
mRow = row;
}
public TextView getDescription() {
if(null == description){
description = (TextView) mRow.findViewById(R.id.description);
}
return description;
}
public TextView getItem() {
if(null == item){
item = (TextView) mRow.findViewById(R.id.item);
}
return item;
}
}
}
Run Code Online (Sandbox Code Playgroud)
自定义项目布局:
<TextView android:text="text" android:id="@+id/item"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@+id/button" android:paddingRight="10dip"
android:paddingLeft="10dip"></TextView>
<TextView android:text="text" android:id="@+id/description"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@+id/item" android:paddingLeft="10dip"
android:paddingRight="10dip"></TextView>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9079 次 |
| 最近记录: |