适用于TextView的Android ListView定位

时间:2011-07-15 22:29:05

标签: android listview textview position dialog

我真的不知道从哪里开始问这个问题,所以我只是试着尽我所能地描述我的问题...我正在使用自定义列表适配器来扩展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;
        }

1 个答案:

答案 0 :(得分:1)

不要认为您可以从对话框视图中设置这些文本视图。您必须在自定义列表适配器中设置它们。从对话框中获取名称,然后将名称添加到自定义适配器的数据集中,最后再次设置适配器或notifyDataSetChanged()。