我真的不知道从哪里开始问这个问题,所以我只是试图描述我的问题最好的我可以...我目前正在使用自定义List使2个文本视图和复选框充气的适配器。一个textView是该选项的描述,其中另一个textView在我需要使用它显示数据时保存。当用户点击列表中的一个项目时,它将弹出一个editText对话框。我得到它来保存文本并显示它,但我遇到的问题是,当它显示数据时,它不在正确的ListView项目上...例如:http://www.vbsteven.be/blog/wp-content/uploads/2009/07/screenshotcalllog.png 说如果我想显示信息I从listView的第一个槽中的对话框中获得。它随机显示在第3或第2位或第4位。这似乎是这样一个简单的问题,但我一直在挣扎了一会儿......Android ListView定位为TextView
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);
/**定义适配器。 */ 私有类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;
}
我不太明白你的意思。如果我怎么能从dialogView中获取名称,那么在范围之外使用它?另外,我是否应该在getView()方法中设置我的TextViews?当我添加数据集时,我是否将其传入?或者只是定义一段数据。对不起,我对android很陌生,在我的大学我们没有任何老师。 – cj1098
从对话框中获取文本,然后将其添加到您的ArrayList或适用于您的适配器的任何结构中,当您添加它时,调用YourCursor.notifyDataSetChanged(),然后光标将重新填充listview并从对话框中获取数据在你的列表视图中。不要忘记调用YourCursor.notifyDataSetInvalidated();这会导致listview重绘自己,包括新数据。 我敢打赌,这是你正在尝试做的。 –
有什么方法可以聊天吗?你说的实际上是有道理的,我只是不知道如何添加该字符串。 – cj1098