2017-09-12 9 views
1

最後の空のgridviewアイテムで入力を開始するためにユーザーがeditTextをクリックするたびに、新しい空のgridviewアイテムが追加される機能を追加しようとしています。問題は、ユーザーが入力を開始したときにリスナーが呼び出されないことです。私は似たような問題についていくつかの質問があることを知っていますが、私のgridViewには問題があると思うeditTextがあります。ここでGridView.setOnItemClickListenerがトリガーされていません

は、私が持っているリスナーです:

roleLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      System.out.println(roleArrayList.get(position).getRole() + "******"); 
      if(roleArrayList.get(position).getRole().equals("")) { 
       if (roleArrayList.size() == 1) { 
        roleArrayList.add(new NewRoleElement()); 
       } else { 
        if (!roleArrayList.get(roleArrayList.size() - 1).getRole().equals("")) { 
         roleArrayList.add(new NewRoleElement()); 
        } 
       } 
      } 
     } 
    }); 

そして、ここでは私のGridViewのためのXMLコードである:ここで

<GridView 
     android:id="@+id/roleList" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:numColumns="1" 
     android:stretchMode="columnWidth" /> 

は、実際のアイテムのための私の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="48dp" 
    android:layout_rowWeight="1" 
    android:background="@drawable/my_layout_bg" 
    android:orientation="horizontal"> 

<EditText 
    android:id="@+id/roleText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="2" 
    android:ems="10" 
    android:hint="Enter a new role" 
    android:inputType="textPersonName" /> 

<CheckBox 
    android:id="@+id/checkBox" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="3" 
    android:text="Repeat?" /> 
</LinearLayout> 

アダプターコードはこちら

public class RoleAdapter extends BaseAdapter{ 
    Context c; 

    public RoleAdapter(Context context) { 
     this.c = context; 
    } 

    @Override 
    public int getCount() { 
     return roleArrayList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return roleArrayList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return roleArrayList.indexOf(position); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.role_template, null); 

     } 
     roleArrayList.get(position).setRoleInput((EditText) convertView.findViewById(R.id.roleText)); 
     roleArrayList.get(position).setRepeatCheckBox((CheckBox) convertView.findViewById(R.id.checkBox)); 
     return convertView; 
    } 
} 
+0

あなたのアダプタコードを共有してください – Dotnetpickles

+0

私は問題がGridView内のEditTextにあると思います。 ArrayAdapter内のEditTextにonClickListenerまたはaddTextChangedListenerを設定してみてください。 –

+0

この@karthikvishnukumarを試すことはできますが、editTextクラスの中からGridViewに新しい項目を追加するにはどうすればよいですか? – mike

答えて

0

主な問題は、EditTextCheckBox

はあなたのコードでこれを試してみてくださいフォーカスを取り込むことです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:layout_rowWeight="1" 
    android:descendantFocusability="blocksDescendants" 
    android:background="@drawable/my_layout_bg" 
    android:orientation="horizontal"> 
    ...... 
</LinearLayout> 

ルートxmlコードにandroid:descendantFocusability="blocksDescendants"を追加します。

もう一つの方法はまた、あなたはEditTextandroid:focusable="false"を設定し、CheckBoxandroid:clickable="false"を設定することができます。

+0

私は両方の方法を試みましたが、リスナーはまだ呼び出されません。 – mike

関連する問題