2017-02-10 112 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

相關問題