2017-02-10 77 views
0

我有一个问题,成千上万的人有在stackoverflow和我不好再问,但我读了所有的问题,并试图实现我的情况,他们都没有工作或者可能我实施了他们错误。Android - 编辑文本和微调与自定义列表视图适配器

这是我的问题。我有一个自定义的ListView有一个微调和编辑文本。我动态创建行。正如你们都知道edittext搞砸了,当滚动,所以我实施,查看持有人模式平滑滚动,但仍然我的列表视图无法正常显示。滚动时,编辑文本仍然会自己复制。我也试图将用户输入保存在另一个类中,因为我有一个微调和编辑文本在一起。我列表视图排布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 


<Spinner 
    android:layout_width="128dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/ListViewSpinner" 
    android:layout_marginTop="10dp" 
    /> 

<EditText 
    android:layout_marginRight="12dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" 
    android:id="@+id/ListViewEditText" 
    android:textSize="16dp" 
    android:hint="Enter the CRN" 
    android:layout_alignParentTop="true" 
    android:layout_toRightOf="@+id/ListViewSpinner" 
    android:layout_toEndOf="@+id/ListViewSpinner" /> 

</RelativeLayout> 

CourseClass.java

public class CourseClass { 
private ArrayList<String> course_name; 
private String course_crn; 


public CourseClass(ArrayList<String> course_name, String course_crn) { 
    super(); 
    this.setCourse_crn(course_crn); 
    this.setCourse_name(course_name); 
} 

public ArrayList<String> getCourse_name() { 
    return course_name; 
} 

public void setCourse_name(ArrayList<String> course_name) { 
    this.course_name = course_name; 
} 

public String getCourse_crn() { 
    return course_crn; 
} 

public void setCourse_crn(String course_crn) { 
    this.course_crn = course_crn; 
} 
} 

CourseAdapter.java

public class CourseAdapter extends ArrayAdapter<CourseClass> { 
Context context; 

public CourseAdapter(Context context, int layoutResourceId, int resource) { 
    super(context, resource); 
    this.layoutResourceId = layoutResourceId; 
    this.context = context; 

} 

@Override 
public void add(CourseClass object) { 
    super.add(object); 
} 

@Override 
public void remove(CourseClass object) { 
    super.remove(object); 
} 

@Override 
public long getItemId(int position) { 
    return super.getItemId(position); 
} 

@Override 
public int getCount() { 
    return super.getCount(); 
} 


@NonNull 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    final ViewHolder holder; 
    if (row == null) { 


     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(R.layout.list_view_row_layout, null); 
     holder = new ViewHolder(); 
     holder.courseSpinner = (Spinner) row.findViewById(R.id.ListViewSpinner); 
     holder.courseCrn = (EditText) row.findViewById(R.id.ListViewEditText); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 
    final CourseClass course = (CourseClass) getItem(position); 
    holder.courseCrn.setText(course.getCourse_crn()); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, R.layout.support_simple_spinner_dropdown_item, course.getCourse_name()); 
    holder.courseSpinner.setAdapter(arrayAdapter); 
    return row; 
} 

public class ViewHolder { 
    Spinner courseSpinner; 
    EditText courseCrn; 
} 

} 

我已经阅读了所有的问题和教程,但我仍然无法弄清楚。

你能指出哪里出错或者你能给我一些想法来解决我的问题吗?

+0

chnages:行= inflater.inflate(R.layout.list_view_row_layout,父母,假);现在让viewholder类为静态 –

+0

使用回收视图将是一个更好的选择 –

+0

谢谢@Divyesh,但现在它不重复的值,但现在它完全删除编辑文本熄灭screen.Can你猜为什么它呢? – Alperen

回答

2

编辑courseCrn后,您没有更新课程对象。 在CourseAdapter类中更改您的getView()方法。


@NonNull 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    final ViewHolder holder; 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(R.layout.list_view_row_layout, null); 
     holder = new ViewHolder(); 
     holder.courseSpinner = (Spinner) row.findViewById(R.id.ListViewSpinner); 
     holder.courseCrn = (EditText) row.findViewById(R.id.ListViewEditText); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 
    final CourseClass course = (CourseClass) getItem(position); 
    holder.courseCrn.setText(course.getCourse_crn()); 
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context, R.layout.support_simple_spinner_dropdown_item, course.getCourse_name()); 
    holder.courseSpinner.setAdapter(arrayAdapter); 
    holder.courseCrn.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      course.setCourse_crn(s.toString()); 
     } 
    }); 
    return row; 
} 
+0

谢谢,我现在加了这个,但它仍然消除了从屏幕消失的领域。同样的问题仍然存在。你有什么想法,为什么它可能是? – Alperen

+0

@Alperen请在github上查看此代码。这里是github项目链接[链接] https://github.com/SanjayKushwah0601/SpinnerWithEditText –

+0

我的代码是完全一样,你给,但我写了东西编辑文本时,当我向下滚动它消失。没有工作,但谢谢你的帮助。我明白 – Alperen

相关问题