androidview監聽
1. Android activity中怎麼監聽view控制項中的變數
你好,單純對變數做監聽是沒有辦法的,可以使用其他的方法,比如handler和message機制,還要利用java的timer定時器,這樣的做法是很不友好的,也是很消耗內存的。
你這里完全沒有必要這樣使用,你這里只是假定count為10,有一個前提是在什麼樣的情況的count的值會改變,比如在button的點擊事件中讓count自增,那麼你需要做的是在點擊事件中判斷count的值為10就可以了,然後做相應的邏輯處理
希望可以幫助到你
2. android 自定義view怎麼寫監聽
Android設置按鈕監聽,方法如下:
方法1:在xml布局文件中配置onClick屬性,例如:android:onClick="onBtnClick",在對應的Activity中加入如下代碼:
public void onBtnClick(View view) {
switch (view.getId()) {
//若有多個按鈕的onClick都為onBtnClick,則可以通過id判斷
}
}
方法2:在Activity中使用findViewById後setOnClickListener,該類必須實現View.OnClickListener接
public class TestActivity extends Activity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
findViewById(R.id.button).setOnClickListener(this);
}
@Override
public void onClick(View v) {
//在這里處理id為R.id.button的點擊事件,多個按鈕可以通過id判斷
}
}
方法3:實例化一個OnClickListener
public class TestActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
findViewById(R.id.button).setOnClickListener(onClickListener);
}
View.OnClickListener onClickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
//在這里處理id為R.id.button的點擊事件,多個按鈕可以通過id判斷
}
};
3. 在android中怎樣給整個頁面設置監聽事件
您可以類似這樣,先實例化子頁面中的Button控制項,然後將實例化後的控制項綁定監聽事件 View view=LayoutInflater.from(context).inflate(R.layout.abc_action_bar_view_list_nav_layout,null); Button button= (Button) view.findViewById(R.id.action_bar); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //寫上點擊後要執行的事件 } }); 當然了,您要在不同頁面實現不同的功能的話,您可以將以上代碼寫在viewPager.setOnPageChangeListener的滾動回調方法當中進行頁面滾動的判斷,從而執行不同的點擊事件。希望能幫到您,如果還有什麼問題,歡迎您繼續追問。謝謝。
4. 如何監聽android view的生命周期
android view有以下14個周期:
1、onFinishInflate() 當View中所有的子控制項均被映射成xml後觸發 。
2、onMeasure( int , int ) 確定所有子元素的大小 。
3、onLayout( boolean , int , int , int , int ) 當View分配所有的子元素的大小和位置時觸發 。
4、onSizeChanged( int , int , int , int ) 當view的大小發生變化時觸發 。
5、onDraw(Canvas) view渲染內容的細節。
6、onKeyDown( int , KeyEvent) 有按鍵按下後觸發 。
7、onKeyUp( int , KeyEvent) 有按鍵按下後彈起時觸發 。
8、onTrackballEvent(MotionEvent) 軌跡球事件 。
9、onTouchEvent(MotionEvent) 觸屏事件 。
10、onFocusChanged( boolean , int , Rect) 當View獲取或失去焦點時觸發 。
11、onWindowFocusChanged( boolean ) 當窗口包含的view獲取或失去焦點時觸發 。
12、onAttachedToWindow() 當view被附著到一個窗口時觸發 。
13、onDetachedFromWindow() 當view離開附著的窗口時觸發,Android123提示該方法和 onAttachedToWindow() 是相反的。
14、onWindowVisibilityChanged( int ) 當窗口中包含的可見的view發生變化時觸發。
5. android : 如何實現移動進入一個view的監聽事件
(1)綁定Adapter,需要判定View組件的子Item,分別注冊AdapterView.onItemclickListener不就可以了,裡面的參數回調可以區分點擊的是那一個子Item;
(2)如果不需要區分子Item,給這兩個View組件分別注冊View.onClickListener就可以了;或者讓Activity實現View.onClickListener介面,在給這兩個View組件注冊監聽,然後在onClick方法里寫個switch語句,就可以按照case R.id.xxx 這樣做想做的處理了。
6. android listview 裡面view的監聽問題
大概要實現這個兩個功能:
1、監聽listview的itemclick(樓主實現辦法:在activity監聽)
2、在myadapter(繼承baseadapter)裡面監聽view(imagebutton和button的onclick事件) (樓主實現辦法:getview裡面監聽mViewHolder的兩個按鈕的onclick)
運行效果:
1、如果listview有1條數據。運行結果毫無問題。都能正確監聽。
2、如果listview有多條數據,第1條數據的imgbutton和button監聽有問題。(比如點擊5次imgbutton,這時不會觸發imgbutton的onclick的。再緊接著點擊第2條數據的itemclick,奇特事件發生了,先觸發itemclick事件,然後觸發5次imgbutton的onclick事件。)
到這里,樓主就不懂了。(樓主就15個財富值。。。高手別吝嗇吧。求指導)
7. android:viewpager里如何獲取其子界面的按鈕並為其添加監聽器啊
方法,在viewpager的adapter裡面有一個方法可以獲取到當前的view,如下:
1 2 3 4 5 6 7 8 9 10 private View mCurrentView; @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { mCurrentView = (View)object; } public View getPrimaryItem() { return mCurrentView; }
ViewPager的adapter通過setPrimaryItem方法設置當前顯示子view.
將其保存下來就可以在後面通過自定義的getPrimaryItem來獲取到當前子view了。
裝監視器:把view裝進list,list載入到pageAdapter,給viewpager設置監聽,監聽的就是全部view,要實現這種圖片輪播(廣告欄效果),就是一句關鍵代碼viewPager.setCurrentItem(msg.arg1);,利用handler和thread,每隔幾秒改變item的下標。
viewPager.setAdapter(new MyAdapter());
viewPager.setOnPageChangeListener(onPageChangeListener);
8. android view裡面能監聽home鍵嗎
(1).在Android中,當按下Home鍵的時候,默認情況下Stop前台的Activity,即Activity設置成停止狀態【onStop()】,而不是銷毀狀態【onDestory()】。如果再次啟動該Activity,不是調用onCreate()方法,而是調用onSavedInstanceState方法。則是從onRestart()開始-onStart()-onResume()。
(2).當按下back鍵則不同,back鍵默認finish前台的activity,即activity的狀態為onDestory為止,再次啟動該activity則從onCreate開始,不會調用onSavedInstanceState方法。
總而言之:按下Home鍵會返回桌面,而back則會返回前一個activity。
在這里Back鍵的實現方法就不贅述了,主要講解一下Home鍵的實現方式吧。以下是我找的參考資料自己思考的。請大家給出建議。
Home鍵監聽的實現方法:
(1).在onResum裡面注冊廣播,OnPause裡面注銷廣播。
(2).在廣播中攔截Intent.ACTION_CLOSE_SYSTEM_DIALOGS 這個Action ,通過獲取Reason欄位 來判斷長按 還是單擊Home鍵。
代碼如下:
(1).Home鍵監聽封裝類:
package com.scd.homewatcher.util;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
/**
* Home鍵監聽封裝
*
* @author way
*
*/
public class HomeWatcher {
// 回調介面
public interface OnHomePressedListener {
public void onHomePressed();
public void onHomeLongPressed();
}
private static final String TAG = "HomeWatcher";
/** 上下文 */
private Context mContext;
/** 過濾器 */
private IntentFilter mFilter;
/** 介面 */
private OnHomePressedListener mListener;
/** 廣播接收者 */
private InnerRecevier mRecevier;
public HomeWatcher(Context context) {
mContext = context;
mRecevier = new InnerRecevier();
mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
/**
* 設置監聽
*
* @param listener
*/
public void setOnHomePressedListener(OnHomePressedListener listener) {
mListener = listener;
}
/**
* 開始監聽,注冊廣播
*/
public void startWatch() {
if (mRecevier != null) {
mContext.registerReceiver(mRecevier, mFilter);
}
}
/**
* 停止監聽,注銷廣播
*/
public void stopWatch() {
if (mRecevier != null) {
mContext.unregisterReceiver(mRecevier);
}
}
/**
* 廣播接收者
*/
private class InnerRecevier extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
Log.i(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
// 短按home鍵
mListener.onHomePressed();
} else if (reason
.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
// 長按home鍵
mListener.onHomeLongPressed();
}
}
}
}
}
}
}
(2).MainActivity類:
package com.scd.homewatcher;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;
import com.scd.homewatcher.util.HomeWatcher;
import com.scd.homewatcher.util.HomeWatcher.OnHomePressedListener;
public class MainActivity extends Activity implements OnHomePressedListener {
private HomeWatcher mHomeWatcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(this);
// 注冊廣播
mHomeWatcher.startWatch();
super.onResume();
}
@Override
protected void onPause() {
mHomeWatcher.setOnHomePressedListener(null);
// 注銷廣播
mHomeWatcher.stopWatch();
super.onPause();
}
@Override
public void onHomePressed() {
// TODO
Toast.makeText(this, "短按Home鍵,實現自己的邏輯", Toast.LENGTH_SHORT).show();
}
@Override
public void onHomeLongPressed() {
// TODO
Toast.makeText(this, "長按Home鍵,實現自己的邏輯", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
System.out.println("按下了back鍵 onKeyDown()");
return false;
} else {
return super.onKeyDown(keyCode, event);
}
}
@Override
public void onBackPressed() {
// super.onBackPressed()會自動調用finish()方法,關閉
super.onBackPressed();
}
}