2016-08-11 5 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

問題で2つのオプションがあります。

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; 
    } 
}); 

あなたはそれを試すことができますが、私はそれがnomalを働かせることができるかわかりません。

+0

は、私はそれがview.OnTouchListener(null)を使用して動作しますが、唯一のX2クリックで作られました。 –

+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; 
} 
関連する問題