2013-03-08 3 views
0

EditText를 눌러서 ListFragment 내부에있는 "Your answer here ..."필드가 아래의 스크린 캡입니다. 사용할 수 없게 만든다. 텍스트 커서가 EditText 필드에 나타나면 빨리 사라지고 EditText 필드는 포커스를 잃습니다.ListFragment에있을 때 EditText보기의 포커스가 남아 있지 않음

관련된 스택 게시물이 거의 발견되지 않았으며 EditText에서 포커스를 훔쳤을 것으로 의심됩니다. 관련 게시물 here을 참조하십시오. 나는 또한 forcing focus에 게시물을 읽었지만 아무것도 의미가 없습니다.

표준 ListFragment 및 ArrayAdapter 코드를 사용하는 것이 훨씬 쉽지만 프로그래밍 방식으로 뷰를 작성할 수 있습니다. 이 목록은 사용자 입력에 따라 늘어나고 Android에서 제공하는 인프라로 쉽게 관리 할 수 ​​있습니다.

아래 내 화면을 참조하십시오. 화면의 오른쪽에는 행에 대한 사용자 정의 레이아웃을 포함하는 ListFragment가 있습니다. 각 행에는 텍스트를 전송하기위한 EditText와 Button이 있습니다.

<?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="horizontal" > 

    <EditText 
     android:id="@+id/answer" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="Your answer here..." 
     android:maxLines="1" 
     android:singleLine="true"/> 

    <Button 
     android:id="@+id/answer_submit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Go" /> 

</LinearLayout> 

답변

0

ItemDetailFragment.DetailArrayAdapter에 다음 줄을 추가 :

여기
public class ItemDetailFragment extends ListFragment { 
    /** 
    * The fragment argument representing the item ID that this fragment 
    * represents. 
    */ 
    public static final String ARG_ITEM_ID = "item_id"; 
    private static final String STATE_ACTIVATED_POSITION = "activated_position"; 
    /** 
    * The dummy content this fragment is presenting. 
    */ 

    private static DetailArrayAdapter mAdapter; 

    /** 
    * Mandatory empty constructor for the fragment manager to instantiate the 
    * fragment (e.g. upon screen orientation changes). 
    */ 
    public ItemDetailFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ArrayList<DetailData> items = new ArrayList<DetailData>(); 
     items.add(new DetailData("1")); 
     mAdapter = new DetailArrayAdapter(getActivity(), R.layout.detail_layout, items); 

     // TODO: replace with a real list adapter. 
     setListAdapter(mAdapter); 
    } 

    class DetailArrayAdapter extends ArrayAdapter<DetailData> { 
     Context context = null; 
     int layoutResourceId; 
     ArrayList<DetailData> data; 

     public DetailArrayAdapter(Context context, int layoutResourceId, ArrayList<DetailData> data){ 
      super(context, layoutResourceId, data); 
      this.context = context; 
      this.layoutResourceId = layoutResourceId; 
      this.data = data; 
     } 

     public View getView(int position, View convertView, ViewGroup parent){ 
      View row = convertView; 

      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false);  

      DetailData data = this.data.get(position); 
      EditText text = (EditText) row.findViewById(R.id.answer); 
      text.setText(data.detail_number + "You answer here ..."); 

      Button submit_button = (Button) row.findViewById(R.id.answer_submit); 
      submit_button.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View v) { 
        int count = mAdapter.getCount(); 
        int item_num = count + 1; 
        DetailData d = new DetailData(""+item_num); 
        mAdapter.add(d); 
       } 

      }); 



      return row; 
     } 
    } 

    class DetailData { 
     public String detail_number; 

     public DetailData(String num){ 
      this.detail_number = num; 
     } 
    } 
} 

사용자 정의 행에 대한 레이아웃 코드 : 여기

screen cap

는 ListFragment에 대한 코드입니다. EditText 객체를 만든 후에 getView()를 호출하면 문제가 해결됩니다.

text.requestFocus(); 

나는 그것을 이해하지 못한다.하지만 편집 할 때 EditText 요청 포커스가 있으면 화면의 EditText (다른 것들도)를 포커스시킬 수있다.

0

requestFocus()는 마지막 편집 텍스트에서만 작동하며 listfragment에 여러 개의 editext가있는 경우 작동하지 않습니다.

관련 문제