2017-02-09 7 views
-2

私は24のEditTextを持っていて、各行に1つのEditTextが必要です。ListViewに別の行を持つ新しいEditTextを追加する方法

注::このコードは正常に動作していますが、1つの行に1つのEditTextを追加します。 1行に1つのEditTextを追加します。
24行のEditTextを24行に分けて、24行分のEditTextを1行に分けて設定したいのです。

これはlyt_listview_activity.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="match_parent" 
android:orientation="vertical" > 

<ListView 
    android:id="@+id/listViewMain" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

</LinearLayout> 

であり、これは、IS-lyt_listview_list.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="match_parent" 
android:background="@android:color/white" 
android:orientation="horizontal" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:textColor="@android:color/black" 
    android:layout_height="wrap_content" 
    android:text="15dp" /> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@android:color/black" 
    android:ems="10" > 

    <requestFocus /> 
</EditText> 

</LinearLayout> 

これは - ListviewActivity.java

package com.example.testlistview; 

import android.app.Activity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

public class ListviewActivity extends Activity { 

private String[] arrText = 
     new String[]{"Text1","Text2","Text3","Text4" 
     ,"Text5","Text6","Text7","Text8","Text9","Text10" 
     ,"Text11","Text12","Text13","Text14","Text15" 
     ,"Text16","Text17","Text18","Text19","Text20" 
     ,"Text21","Text22","Text23","Text24"}; 
private String[] arrTemp; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lyt_listview_activity) ; 

    arrTemp = new String[arrText.length]; 

    MyListAdapter myListAdapter = new MyListAdapter(); 
    ListView listView = (ListView) findViewById(R.id.listViewMain); 
    listView.setAdapter(myListAdapter); 
} 

private class MyListAdapter extends BaseAdapter{ 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     if(arrText != null && arrText.length != 0){ 
      return arrText.length;  
     } 
     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return arrText[position]; 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     //ViewHolder holder = null; 
     final ViewHolder holder; 
     if (convertView == null) { 

      holder = new ViewHolder(); 
      LayoutInflater inflater = ListviewActivity.this.getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.lyt_listview_list, null); 
      holder.textView1 = (TextView) convertView.findViewById(R.id.textView1); 
      holder.editText1 = (EditText) convertView.findViewById(R.id.editText1);  

      convertView.setTag(holder); 

     } else { 

      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.ref = position; 

     holder.textView1.setText(arrText[position]); 
     holder.editText1.setText(arrTemp[position]); 
     holder.editText1.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       arrTemp[holder.ref] = arg0.toString(); 
      } 
     }); 

     return convertView; 
    } 

    private class ViewHolder { 
     TextView textView1; 
     EditText editText1; 
     int ref; 
    } 
} 
} 

enter image description here

+0

1行で1つのeditTextをどういう意味ですか?現在のコードはListViewの1行に1つのEditTextを追加していませんか? – Rachit

+0

うまく動作します。しかし、1つのedittextがあります。私は24のedittextを持っています。 –

+0

その作業は問題ありません。しかし、24の行に1つのedittextがあります.24のedittextがあり、24行に24のedittextを追加したいのです。 –

答えて

0

lyt_listview_list.xmlにはEditTextが1つしかありません。 getCount()によって決定され、そしてそれはarrText.length、または24

を返していますどのように多くの行ご覧各行

それらはあなたの行であるため、唯一のEditText(とTextViewには)あります限り、 "別の行を追加する"。配列に何も追加することはできません。あなたのアダプタでArraylistを使用する必要があります。その場合は、BaseAdapterではなくArrayAdapterが必要になります

関連する問題