2

내 목록보기 내에 편집 텍스트와 저장 버튼이 있습니다. 사용자가 저장 버튼을 클릭하면 텍스트를 지워야합니다. 나는 이렇게 시도했다목록보기 안의 Android 수정 텍스트

txtDescription.setText(""); 

그러나 효과가 없다. 왜 그것이 효과가 없는지 아는 사람이 있습니까? 어댑터 클래스가 첨부 됨

도와주세요, 미리 감사드립니다 !!

private class ListAdapters extends ArrayAdapter<ApplicationBean> { 
    private ArrayList<ApplicationBean> items; 
    private int position; 

    public ListAdapters(Context context, int textViewResourceId, 
      ArrayList<ApplicationBean> mTitleList) { 
     super(context, textViewResourceId, mTitleList); 
     this.items = mTitleList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     this.position = position; 
     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.applicationlistitem, null); 
     } 

     final ApplicationBean o = (ApplicationBean) items.get(position); 

     if (o != null) { 

      txtDescription = (EditText) v 
        .findViewById(R.id.description_text); 



      submitButton = (Button) v.findViewById(R.id.submit_btn); 
      submitButton.setTag(position); 
      submitButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

         PostRequest p = new PostRequest(Integer.parseInt(v 
           .getTag().toString())); 
         p.execute(); 
       } 

      }); 
     } 
     return v; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public int getViewTypeCount() { 
     // TODO Auto-generated method stub 
     return items.size(); 
    } 

} 



private class PostRequest extends AsyncTask<Void, Void, String> { 
    ProgressDialog dlgprogress; 
    int position; 

    public PostRequest(int selectedIndex) { 
     position = selectedIndex; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     dlgprogress.dismiss(); 
     final Dialog dlg = new AlertDialog.Builder(mContext) 
       .setTitle("Message") 
       .setMessage(result) 
       .setPositiveButton("Ok", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, 
            int whichButton) { 
           dlgprogress.dismiss(); 
           dlgprogress.cancel(); 
           txtDescription.setText(""); 
          } 
         }).create(); 
     dlg.show(); 
     super.onPostExecute(result); 
    } 

    @Override 
    protected void onPreExecute() { 
     dlgprogress = ProgressDialog.show(mContext, "", "Please wait"); 
     // dlgprogress.show(mContext, "", "Please wait"); 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(Void... arg0) { 
     //do something............. 
     //.......................... 
     dlgprogress.dismiss(); 
     return rsponse; 
    } 

} 

applicationlistitem.xml

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:background="#FFFFFF"> 



    <LinearLayout 
     android:id="@+id/lineatlayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="DESCRIPTION : " 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:textColor="#000000" /> 

     <EditText 
      android:id="@+id/description_text" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:clickable="true" 
      android:ems="10" 
      android:focusable="true" 
      android:focusableInTouchMode="true" 
      android:inputType="textMultiLine" 
      android:textColor="#000000"> 
     </EditText> 
    </LinearLayout> 

    <Button 
     android:id="@+id/submit_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="SUBMIT" /> 

    </LinearLayout> 
+3

사용자 정의 어댑터 인 경우 listview의 가능한 코드를 표시하십시오. –

+1

전체 어댑터 코드를 표시 –

+0

내 목록에 여러 개의 목록 편집 텍스트가 있습니까? 그렇다면 여기에 코드를 입력하면 신속하게 대답 할 수 있습니다. –

답변

1

당신이 할 수있는 또한 object을 단추보기로 태그로 설정하십시오.

여러분의 getView() 방법에서 이렇게하는 것이 좋을 것이라고 생각합니다.

   //EDIT 
     txtDescription.setTag(position); // set position to edittext 

     submitButton = (Button) v.findViewById(R.id.submit_btn); 
     submitButton.setTag(txtDescription); // set the current edittext object 

     submitButton.setOnClickListener(new OnClickListener() {   
       @Override 
       public void onClick(View v) { 
         EditText tv = (EditText)v.getTag(); // get edittext object 
         tv.setText(""); 
          //Edit 
         PostRequest p = new PostRequest(Integer.parseInt(tv 
           .getTag().toString())); // get position from edittext 
        } 
       }); 

편집 전체보기

나는이 테스트하지 않았습니다를 보낼 수 있지만, 나는 또한 다음 작업이 editext을 보낼으로 생성자에 체크 박스를 보내지 않는 경우가 작동합니다 가정합니다.

class PostTask extends AsyncTask<Void,Void,Void> 
{ 
    CheckBox cb; 
    EditText et; 
    int pos; 
    PostTask(int pos,View view) 
    { 
     cb = view.findViewById(R.id.cbox1); 
     et = view.findViewById(R.id.et1); 
     pos = Integer.parseInt(et.getTag().toString()); 
    } 
} 

지금의 getView 변화

submitButton.setOnClickListener(new OnClickListener() {  
      @Override 
      public void onClick(View v) { 
        PostRequest p = new PostRequest((View)v.getParent()); // get position from edittext 
      } 
}); 
+0

응용 프로그램이 다운되었습니다 ...... 10-31 11 : 34 : 14.141 : E/AndroidRuntime (1226) : java.lang.ClassCastException : java.lang.Integer를 android.widget.EditText에 캐스팅 할 수 없습니다. – user1767260

+0

@ user1767260 오류는 setTag (위치)를 가지고 getTag()로 EditText를 가져 오는 중 ... 오류가 발생했습니다. 이 줄'submitButton.setTag (txtDescription);을 올바르게 작성하고 위치를 태그로 설정 한 행을 제거하십시오. – MKJParekh

+0

submitButton.setTag (txtDescription)를 설정할 수 없습니다. PostRequest에 위치를 전달해야하므로 – user1767260

1

당신이 목록보기 검사에 대한 사용자 정의 어댑터를 처음 사용하는 경우 목록보기

public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     View row=null; 
     Context context = getApplicationContext(); 
     LayoutInflater inflater=cntx.getLayoutInflater(); 
     row=inflater.inflate(R.layout.search_list_item, null); 

     EditText txtDescription= (EditText)row.findViewById(R.id.txtDescription); 
     Button Savebtn = (Button)row.findViewById(R.id.SaveBtn); 

     Savebtn.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) 
      { 
       txtDescription.setText(""); 
       // And your additional coding 
      } 
     }); 
    } 

에 대한 사용자 정의 어댑터 클래스를 유지 here

+0

나는 그것이 작동 할 것이라는 것에 의심 스럽지만 한 번 구현할 것입니다.하지만 listview를 스크롤하여 작동하는지 확인해보십시오. [내 가정은 txtDescription에 할당 된 마지막 개체가 항상 클릭 한 사람이 아닌 setText ("")입니다. – MKJParekh

0

에 당신은 EDITTEXT을 가지고 모든 목록 항목에 버튼을 제출 // ??

좋습니다. listView는 뷰를 변환하는 시스템을 가지고 있습니다 ... 배열의 크기만큼 뷰를 만들지는 않지만 화면에 사용자를 표시 할 수있을만큼만 생성 한 다음 사용자가 원하는 동안 변환합니다. 스크롤 ... 하나의 editText를 지우면 다른 값으로 채워지는 것을 볼 수 있습니다 ... 그래서 나는 당신이 editText 값을 저장하고 submit 버튼을 클릭하는 것과 같이 listView를 먹일 다른 배열을 갖도록 추천합니다 그것들과 어댑터에서 editText의 텍스트를이 배열로 설정해야합니다. 그래서 값이 이미 제출되면 비어 있습니다. 그런 다음 ... 을

ArrayList<String> texts = new ArrayList<String>(); 
for(int i = 0; i < items.size(); i++) 
texts.add(“”); 
그래서

당신의 editTexts 모두가 처음에는 비어 있습니다 : 목록과 같은 크기의 배열을 가지고

시도 :

그리고 여기에 귀하의 문제에 대한 솔루션입니다 사용자 정의 어댑터의 getView 메소드에 다음과 같이 설정하십시오.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    this.position = position; 
    if (v == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.applicationlistitem, null); 
    } 

    final ApplicationBean o = (ApplicationBean) items.get(position); 

    if (o != null) { 

     txtDescription = (EditText) v 
       .findViewById(R.id.description_text); 

    // you should set your every views’ editText here 
    txtDescription.setText(texts.get(position)); 

    // here you save texts also they changes 
    txtDescription.addTextChangedListener({ 
     @Override 
     public void afterTextChanged(Editable s) { 
      texts.remove(position); 
      texts.add(position, s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { } 

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

     submitButton = (Button) v.findViewById(R.id.submit_btn); 
     submitButton.setTag(position); 
     submitButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
     texts.remove(position); 
     texts.add(position, “”); 

        PostRequest p = new PostRequest(Integer.parseInt(v 
          .getTag().toString())); 
        p.execute(); 
      } 

     }); 
    } 
    return v; 
}