【发布时间】:2014-05-15 19:35:59
【问题描述】:
我正在实现一个自定义 ListView,它有一些文本字段(用于标题),在单击该文本视图下方时,它会打开一个显示选项列表的警报对话框,当用户选择任何选项时,TextView 文本设置为该选项。到这里一切都很好,但是当我滚动列表视图时,在该文本视图中选择的值只是更改为其他一些值。请帮我解决这个问题如何使这个视图正确。为此,我在下面显示两张图片
第一张图片,我选择了第一行文本作为一个,另一行保持不变。
这是在向下滚动和回滚后显示的第二张图片,第一行 textview 刚刚更改,另一个也充满了文本,即使我没有为它们选择任何值。
这是我的 MainActivity 代码
public class MainActivity extends Activity{
Controller control ;
ArrayList<MyDetails> detail;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test_speed);
detail=(ArrayList<MyDetails>) control.Table_Details.Data();
ListView listview = (ListView) findViewById(R.id.list_layout);
MyBaseAdapter adapter = new MyBaseAdapter(this, detail);
listview.setAdapter(adapter);
}
public void showDialog(final TextView option,final CharSequence[] items){
AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
builder.setTitle("Make your selection");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
// Do something with the selection
option.setText(items[item]);
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
这是我的适配器代码
public class MyBaseAdapter extends BaseAdapter{
ArrayList<MyDetails> list;
Context context ;
public MyBaseAdapter(Context con, ArrayList<MyDetails> detail) {
this.context = con;
this.list =detail ;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View view, ViewGroup arg2) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(view == null)
{
view = inflater.inflate(R.layout.adapter_layout, null);
}
TextView title= (TextView) view.findViewById(R.id.title);
final TextView data = (TextView) view.findViewById(R.id.data);
title.setText(list.get(position).title());
final CharSequence[] items = {
"One", "tow", "three", "four", "six"
};
data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((MainActivity) context).showDialog(data,items);
}
});
return view;
}
}
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
而不是使用
data.setOnClickListener,您应该实现OnItemClickListener来区分您正在单击的项目并需要相应地进行更改。 -
@Tukajo 这是您发布的好信息,谢谢。你能帮我一些代码示例来解决上述问题吗?