2016-08-11 6 views
0

클래스의 CustomAdapter 클래스에 getGroupView() 메서드가 있습니다. 내가하고 싶은 ExpandableListView가 있습니다 : 그룹 항목을 클릭하면 ExpandableListView가 작동하는 것처럼 자식을 보여줍니다. 더 긴 시간 동안 그룹 항목을 누르면 다른 활동이 열립니다. 문제는 OnTouchListener로 인해 클릭 할 때 하위 항목을 표시하지 않고 더 긴 프레스에서만 다른 활동에 액세스한다는 것입니다. 내 해결책은 OnTouch() 메서드에서 false를 반환하는 것이지만 작동하지 않습니다. 어떤 아이디어?onTouch() 메서드는 groupItems의 ExpandableView 효과를 취소합니다.

참고 : 저는 Android 개발에 꽤 초보자입니다. 감사 : d

@Override 

public View getGroupView(int groupPosition, boolean isExpanded, View convertview, ViewGroup parent) { 
    final ViewGroup getAct = parent; 
    if(convertview == null) 
     convertview = inflater.inflate(R.layout.explistgroupview, null); 
    TextView textView = (TextView) convertview.findViewById(R.id.groupTextView); 
    textView.setText(tables.get(groupPosition)); 
    ImageView imageView = (ImageView) convertview.findViewById(R.id.groupImageView); 
    imageView.setImageResource(R.drawable.plus_sign); 



    convertview.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      switch(motionEvent.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        startTime = System.currentTimeMillis(); 
        break; 
       case MotionEvent.ACTION_UP: 
        long time = System.currentTimeMillis() - startTime; 
        duration += time; 

        if(duration >= MAX_DURATION) { 
         Context context = getAct.getContext(); 
         i = new Intent(context, beer.class); 
         context.startActivity(i); 

        } 
        else { 
         return false; 
        } 


      } 
      duration = 0; 
      return true; 
     } 
    }); 
    return convertview; 

} 

답변

0

문제에는 두 가지 옵션이 있습니다.

1 ,

case MotionEvent.ACTION_UP: 
       long time = System.currentTimeMillis() - startTime; 
       duration += time; 
       if(duration <= MIN_DURATION){ 
        // TODO: do onClick() 
        return true; 
       } 

       if(duration >= MAX_DURATION) { 
        Context context = getAct.getContext(); 
        i = new Intent(context, beer.class); 
        context.startActivity(i); 

       } 
       else { 
        return false; 
       } 

2,

convertview.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch(motionEvent.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       startTime = System.currentTimeMillis(); 
       break; 
      case MotionEvent.ACTION_UP: 
       long time = System.currentTimeMillis() - startTime; 
       duration += time; 

       if(duration >= MAX_DURATION) { 
        Context context = getAct.getContext(); 
        i = new Intent(context, beer.class); 
        context.startActivity(i); 

       } 
       else { 
        return false; 
       } 


     } 
     duration = 0; 

     //next line has change 
     return false; 
    } 
}); 

당신은 그것을 시도 할 수 있습니다,하지만 난 그게 노멀 작업 할 수 있습니다 모르겠어요.

+0

가 나는 view.OnTouchListener (널)를 사용하여 작동하지만 2 배 클릭에했다. –

+0

onTouch 메서드에서 반환 값이 true이면 터치 이벤트가 사라질 것입니다. –

+0

나는 당신의 방법을 시도했다. 마지막은 효과가 없었고 첫 번째는 클릭 할 때 활동에 액세스하지만 어떤 식 으로든 아이들을 보여주지는 않는다. –

0

getChildView :

@Override 
public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    tabelOrdersOnEachTable = (ArrayList<String>) tableOrders.get(groupPosition); 
    TextView textView = null; 
    if (convertView == null) 
     convertView = inflater.inflate(R.layout.explistchildview, null); 
textView = (TextView) convertView.findViewById(R.id.textView1); 
    textView.setText(tabelOrdersOnEachTable.get(childPosition)); 

    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Log.i("ChildClick", "Merge"); 
      Toast.makeText(activity, "Clicked on: " + tabelOrdersOnEachTable.get(childPosition), Toast.LENGTH_LONG).show(); 
     } 
    }); 


    return convertView; 
}