Android scrollとlistviewイベントの競合
極めて小さな可能性の下でこのような需要があることができて、scrollの中でlistviewを含んで、Googleはこのようなネストを推薦しませんが、やむを得ずこのようにしなければならなくて、このように2つの可能性を招きます
1.ListViewには1つのItemしか表示できません.
2.ListViewが完全に失効し、スクロールできなくなり、
上記の第1の理由は,ListViewをネストしたandroidシステムでは幅を正確に算出できないため,この場合は高さを固定値に設定する必要がある.
上記第2の原因は、イベントトリガが上から下にある、すなわち、どのコントロールが最外層にあるか、そのコントロールが最も優先的にトリガイベントを取得するイベント配信メカニズムによるものである.
解決策は、ListViewがスクロールイベントを優先的に取得することです.
MainActivity.java
1.ListViewには1つのItemしか表示できません.
2.ListViewが完全に失効し、スクロールできなくなり、
上記の第1の理由は,ListViewをネストしたandroidシステムでは幅を正確に算出できないため,この場合は高さを固定値に設定する必要がある.
上記第2の原因は、イベントトリガが上から下にある、すなわち、どのコントロールが最外層にあるか、そのコントロールが最も優先的にトリガイベントを取得するイベント配信メカニズムによるものである.
解決策は、ListViewがスクロールイベントを優先的に取得することです.
MainActivity.java
public class MainActivity extends Activity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView) findViewById(R.id.listView1);
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction()==MotionEvent.ACTION_MOVE){
listView.dispatchTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
public List<String> getData(){
List<String> data = new ArrayList<String>();
for(int i=0;i<50;i++){
data.add("XXX"+i);
}
return data;
}
}