2014-01-28 66 views
0

我已經創建了一個自定義listview的應用程序。我的列表視圖包含一個edittext字段。但我無法用值填充編輯文本。我對android很陌生,所以很難找到對我有用的錯誤。無法填充android中的EditText ListView中的細節

這裏是我的代碼:

 public class MainActivity extends Activity { 
     private ListView myList; 
     private MyAdapter myAdapter; 


     /** Called when the activity is first created. */ 
     @Override 
      public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myList = (ListView) findViewById(R.id.MyList); 
     myList.setItemsCanFocus(true); 
     myAdapter = new MyAdapter(); 
     myList.setAdapter(myAdapter); 

      } 

      public class MyAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public ArrayList myItems = new ArrayList(); 
     public MyAdapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      for (int i = 0; i < 20; i++) { 
       ListItem listItem = new ListItem(); 
       listItem.caption = "Caption" + i; 
       myItems.add(listItem); 
      } 
      notifyDataSetChanged(); 
     } 

     public int getCount() { 
      return myItems.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.item, null); 
       holder.caption = (EditText) convertView 
         .findViewById(R.id.ItemCaption); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      //Fill EditText with the value you have in data source 
      holder.caption.setText(myItems.get(position).caption); 
      holder.caption.setId(position); 

      //we need to update adapter once we finish with editing 
      holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() { 
       public void onFocusChange(View v, boolean hasFocus) { 
        if (!hasFocus){ 
         final int position = v.getId(); 
         final EditText Caption = (EditText) v; 
         myItems.get(position).caption = Caption.getText().toString(); 
        } 
       } 
       }); 

       return convertView; 
      } 
      } 

     class ViewHolder { 
      EditText caption; 
      } 

      class ListItem { 
       String caption; 
      } 
     } 

item.xml 

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

     <EditText android:id="@+id/ItemCaption" 
      android:layout_height="40dp" 
      android:layout_width="fill_parent" 
      android:layout_marginLeft="2dip" 
      android:singleLine="true"> 
     </EditText> 

      </LinearLayout> 

activity_main.xml中

+0

上傳一個卡扣 –

+0

嘗試改變'機器人:descendantFocusability = 「beforeDescendants」''到機器人:descendantFocusability = 「afterDescendants」' – Apoorv

+0

錯誤顯示java代碼中的兩行:holder.caption.setText(myItems.get(posi薦).caption);和\t \t myItems.get(position).caption = Caption.getText()。toString(); – doubter

回答

3

嘗試這種方式

list_item.xml

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

    <EditText 
     android:id="@+id/ItemCaption" 
     android:layout_height="40dp" 
     android:layout_width="match_parent" 
     android:layout_marginLeft="2dp" 
     android:singleLine="true"> 
    </EditText> 

</LinearLayout> 

activity_main.xml中

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

    <ListView 
     android:id="@+id/MyList" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:descendantFocusability="afterDescendants"> 
    </ListView> 

</LinearLayout> 

MyActivity.java

public class MyActivity extends Activity { 

    private ListView myList; 
    private MyAdapter myAdapter; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myList = (ListView) findViewById(R.id.MyList); 
     myList.setItemsCanFocus(true); 
     myAdapter = new MyAdapter(this); 
     myList.setAdapter(myAdapter); 

    } 

    public class MyAdapter extends BaseAdapter { 
     private ArrayList<ListItem> myItems; 
     private Context context; 
     public MyAdapter(Context context) { 
      this.context = context; 
      myItems = new ArrayList<ListItem>(); 
      for (int i = 0; i < 20; i++) { 
       ListItem listItem = new ListItem(); 
       listItem.caption = "Caption" + i; 
       myItems.add(listItem); 
      } 
     } 

     public int getCount() { 
      return myItems.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(final int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null, false); 
       holder.caption = (EditText) convertView 
         .findViewById(R.id.ItemCaption); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.caption.setText(myItems.get(position).caption); 
      holder.caption.setTag(position); 
      holder.caption.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
       public void onFocusChange(View v, boolean hasFocus) { 
        if (!hasFocus){ 
         final int position = (Integer)v.getTag(); 
         final EditText Caption = (EditText) v; 
         myItems.get(position).caption = Caption.getText().toString(); 
        } 
       } 
      }); 
      return convertView; 
     } 
    } 

    class ViewHolder { 
     EditText caption; 
    } 

    class ListItem { 
     String caption; 
    } 
} 
+0

謝謝。它的工作:) – doubter

+0

也如何可以把一些文本中的文本字段像佔位符? – doubter

+0

你能詳細說明嗎? –