2015-04-01 53 views
1

當我嘗試以編程方式添加textview時,我無法設置setOnFocusChangeListener甚至setOnClickListener當以編程方式添加TextView時,setOnFocusChangeListener不起作用

我試圖

txt1.requestFocus(); 
txt1.setFocusable(true); 
txt1.setFocusableInTouchMode(true); 

txt1.setClickable(true); 

setOnTouchListener是工作,但其他的聽衆沒有。 這是我的代碼:

text_b.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View view) 
    { 
     try 
     { 
      TextView txt1 = new TextView(DashActivity.this); 

      txt1.setText("This is me"); 
      txt1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); 
      txt1.setTextColor(Color.parseColor("#FAC421")); 
      txt1.requestFocus(); 
      txt1.setFocusable(true); 
      txt1.setFocusableInTouchMode(true); 
      txt1.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View view) 
       { 
        try 
        { 
         Log.i("txt: ", "Clicked"); 
        } 
        catch (NullPointerException e) 
        { 
         e.printStackTrace(); 
        } 
       } 
      }); 

      txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() 
      { 
       @Override 
       public void onFocusChange(View v, boolean hasFocus) 
       { 
        Log.i("txt:" , "Changed"); 

        if(hasFocus) 
        { 
         v.setBackgroundResource(R.drawable.text_border); 
        } 
        else 
        { 
         v.setBackgroundResource(0); 
        } 
       } 
      }); 

      txt1.setOnTouchListener(new View.OnTouchListener() 
      { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) 
       { 
        if (event.getAction() == MotionEvent.ACTION_MOVE) 
        { 
          // Offsets are for centering the TextView on the touch location 
         v.setX(event.getRawX()); 
         v.setY(event.getRawY()); 
        } 

        return true; 
       } 
      }); 

      mRrootLayout.addView(txt1); 
     } 
     catch (NullPointerException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}); 

任何解決方案?

回答

0

返回false而不是trueonTouch方法在View.OnTouchListener。當您返回true時,您將此觸摸事件標記爲已處理,因此此觸摸事件不會進一步傳播(到OnClickListener和OnFocusChangeListener)。

相關問題