我真的不知道从哪里开始问这个问题,所以我只是试着尽我所能地描述我的问题...我正在使用自定义列表适配器来扩展2个文本的ListView视图和复选框。一个textView是该选项的描述,其中另一个textView被保存,当我需要使用它来显示数据时。当用户单击列表中的项目时,它将弹出一个editText对话框。我得到它来保存文本并显示它,但我遇到的问题是,当它显示数据时,它不在正确的ListView项目上...例如:http://www.vbsteven.be/blog/wp-content/uploads/2009/07/screenshotcalllog.png 如果我想在listView的第一个插槽中显示我从对话框中获得的信息,请说。它在第3个第2或第4个位置随机显示。这似乎是一个简单的问题,但我一直在努力......
xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/rowTextView"
android:layout_width="wrap_content"
android:layout_height="70dp"
android:padding="12dp"
android:textSize="16sp" >
</TextView>
<TextView android:id="@+id/alarm_name_text"
android:layout_height="wrap_content"
android:text=""
android:layout_toRightOf="@+id/rowTextView"
android:layout_width="fill_parent">
</TextView>
<CheckBox android:id="@+id/CheckBox01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_alignParentRight="true" android:layout_marginRight="6sp"
android:focusable="false">
</CheckBox>
</RelativeLayout>
的活动:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_TEXT_ENTRY:
LayoutInflater mInflater = LayoutInflater.from(this);
final View textEntryView = mInflater.inflate(
R.layout.alert_text_entry, null);
/*final View textEntryView1 = mInflater.inflate(R.layout.row, null);*/
final EditText savedText = ((EditText)textEntryView.findViewById(R.id.password_edit));
final TextView rowSavedText = ((TextView)findViewById(R.id.alarm_name_text));
return new AlertDialog.Builder(AlarmList.this)
.setIcon(R.drawable.alert_icon)
.setTitle("Enter your name")
.setView(textEntryView)
.setPositiveButton("accept",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
String temp = savedText.getText().toString();
rowSavedText.setText(temp);
rowSavedText.setVisibility(0);
}
})
.setNegativeButton("Cancel", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).create();
}
return null;
}
如果有人想看到我的代码中的任何其他部分需要帮助,请告诉我们。提前谢谢!
继承我的列表适配器和数据:
planets = new Planet[] { new Planet("Turn On Alarm"),
new Planet("Alarm Name"), new Planet("Time"),
new Planet("Sound"), new Planet("Vibrate"),
new Planet("Repeat"), new Planet("Volume Control"),
new Planet("Second Alarm") };
}
ArrayList<Planet> planetList = new ArrayList<Planet>();
planetList.addAll(Arrays.asList(planets));
listAdapter = new PlanetArrayAdapter(this, planetList);
/ **用于显示Planet对象数组的自定义适配器。 * / 私有类PlanetArrayAdapter扩展了ArrayAdapter {
private LayoutInflater inflater;
public PlanetArrayAdapter(Context context, List<Planet> planetList) {
super(context, R.layout.row, R.id.rowTextView, planetList);
// Cache the LayoutInflate to avoid asking for a new one each time.
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Planet to display
Planet planet = (Planet) this.getItem(position);
// The child views in each row.
CheckBox checkBox;
TextView textView;
Spinner mySpinner;
// Create a new row view
if (convertView == null) {
convertView = inflater.inflate(R.layout.row, null);
// Find the child views.
textView = (TextView) convertView
.findViewById(R.id.rowTextView);
checkBox = (CheckBox) convertView.findViewById(R.id.CheckBox01);
// Optimization: Tag the row with it's child views, so we don't
// have to
// call findViewById() later when we reuse the row.
convertView.setTag(new PlanetViewHolder(textView, checkBox));
// If CheckBox is toggled, update the planet it is tagged with.
checkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
Planet planet = (Planet) cb.getTag();
planet.setChecked(cb.isChecked());
}
});
}
// Reuse existing row view
else {
// Because we use a ViewHolder, we avoid having to call
// findViewById().
PlanetViewHolder viewHolder = (PlanetViewHolder) convertView
.getTag();
checkBox = viewHolder.getCheckBox();
textView = viewHolder.getTextView();
}
// Tag the CheckBox with the Planet it is displaying, so that we can
// access the planet in onClick() when the CheckBox is toggled.
checkBox.setTag(planet);
// Display planet data
checkBox.setChecked(planet.isChecked());
textView.setText(planet.getName());
return convertView;
}
答案 0 :(得分:1)
不要认为您可以从对话框视图中设置这些文本视图。您必须在自定义列表适配器中设置它们。从对话框中获取名称,然后将名称添加到自定义适配器的数据集中,最后再次设置适配器或notifyDataSetChanged()。