انجمن سایت کلیدستان


رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
قرار دادن دو کلاس در یک تابع (کدهای دو Activity) (برنامه نویسی اندروید)

قرار دادن دو کلاس در یک تابع (کدهای دو Activity) (برنامه نویسی اندروید)

#1
سلام دوستان
من میخوام دستورات دو تابع را در یک کلاس قرار بدهم.
کلاس اول از نوع
public class sensor extends Activity implements SensorEventListene{}
کلاس دوم از نوع
public class MainActivity extends Activity implements MediaPlayerControl{}


دستورات را به صورت زیر در یک کلاس نوشتم  تنها دستوراتی اجرا میشوند که مربوط به اولین تعریف اکتیویتی است، یعنی(MainActivity) اما دستوراتی را که در حلقه یا  public class sensor نوشته شده اند اجرا نمیگردند. چرا؟
راه حل مناسبی سراغ دارید؟

کد پی‌اچ‌پی:
//--------------------- شروع دستورات اولین کلاس
public class MainActivity extends Activity implements MediaPlayerControl {
 
//-----------------------دستورات کلاس سنسور و دومین اکتیوتی
public class sensor extends Activity implements SensorEventListener {

        private 
TextView txt;
        private 
Button btn_sensor_next;
        private 
SensorManager sm;
        private 
Sensor sAcc;
        @
Override
        
protected void onCreate(Bundle savedInstanceState) {
            
super.onCreate(savedInstanceState);
            
setContentView(R.layout.sensor);
            
            
txt=(TextViewfindViewById(R.id.txt);
            
            
btn_sensor_next=(Button)findViewById(R.id.btn_sensor_next);
            
//
            
btn_sensor_next.setOnClickListener(new OnClickListener() {
                @
Override
                
public void onClick(View arg0) {
                    
MainActivity cd;
                }
            });
            
            
DisplayMetrics dm=new DisplayMetrics();
            
getWindowManager().getDefaultDisplay().getMetrics(dm);
            
            
sm=(SensorManagergetSystemService(Context.SENSOR_SERVICE);
            
sAcc=sm.getDefaultSensor(Sensor.TYPE_PROXIMITY);
            
            
Toast.makeText(getApplicationContext(), ""Toast.LENGTH_LONG).show();
            
        }

        @
Override
        
public void onAccuracyChanged(Sensor arg0int arg1) {
            
// TODO Auto-generated method stub
            
        
}

        private 
int top=10;
        private 
int left=10;
        @
Override
        
public void onSensorChanged(SensorEvent s) {
            
            
txt.setText(s.values[0]+"");
            
        }
        
        @
Override
        
protected void onResume() {
            
super.onResume();
            
            
sm.registerListener(thissAccSensorManager.SENSOR_DELAY_NORMAL);
            
        }
        
        @
Override
        
protected void onPause() {
            
super.onPause();
            
sm.unregisterListener(this);
        }

    }
    
    
    
//---------------پایان دستورات کلاس سنسور و دومین کلاس
    
private Button btn_sensor;
    
//
    
private ArrayList<SongsongList;
    private 
ListView songView;
 
    
//service
    
private MusicService musicSrv;
    private 
Intent playIntent;
    
//binding
    
private boolean musicBound=false;
 
    
//controller
    
private MusicController controller;
 
    
//
    
private boolean paused=falseplaybackPaused=false;
 
    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.activity_main);
        
        
btn_sensor=(Button)findViewById(R.id.btn_sensor);
        
        
songView = (ListView)findViewById(R.id.song_list);
        
        
songList = new ArrayList<Song>;();
        
        
getSongList();
        
        
//
        
btn_sensor.setOnClickListener(new OnClickListener() {
            @
Override
            
public void onClick(View arg0) {
                
startActivity(new Intent(MainActivity.this,sensor.class));
            }
        });
        
        
        
Collections.sort(songList, new Comparator<Song>;(){
            public 
int compare(Song aSong b){
                return 
a.getTitle().compareTo(b.getTitle());
            }
        });
        
        
SongAdapter songAdt = new SongAdapter(thissongList);
        
songView.setAdapter(songAdt);
 
        
//setup controller
        
setController();
 
        
//end button        
        
ImageButton imageButton_end = (ImageButtonfindViewById(R.id.ib_end);
        
imageButton_end.setOnClickListener(new View.OnClickListener() {
            @
Override
            
public void onClick(View v) {
                
                
Intent intent = new Intent(MainActivity.thisMusicService.class);
                
stopService(intent);
                
                
finish();
            }
        });
    }
 
    
    private 
ServiceConnection musicConnection = new ServiceConnection(){
 
        @
Override
        
public void onServiceConnected(ComponentName nameIBinder service) {
            
MusicBinder binder = (MusicBinder)service;
            
            
musicSrv binder.getService();
            
musicSrv.setList(songList);
            
musicBound true;
        }
 
        @
Override
        
public void onServiceDisconnected(ComponentName name) {
            
musicBound false;
        }
    };
 
    @
Override
    
protected void onStart() {
        
super.onStart();
        if(
playIntent==null){
            
playIntent = new Intent(thisMusicService.class);
            
bindService(playIntentmusicConnectionContext.BIND_AUTO_CREATE);
            
startService(playIntent);
        }
    }
 
    
    public 
void songPicked(View view){
        
musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
        
musicSrv.playSong();
        if(
playbackPaused){
            
setController();
            
playbackPaused=false;
        }
        
controller.show(0);
    }
    
    
    public 
void getSongList(){
        
        
ContentResolver musicResolver getContentResolver();
        
Uri musicUri android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        
Cursor musicCursor musicResolver.query(musicUrinullnullnullnull);
        
//
        
if(musicCursor!=null && musicCursor.moveToFirst()){
            
//
            
int titleColumn musicCursor.getColumnIndex
                    
(android.provider.MediaStore.Audio.Media.TITLE);
            
int idColumn musicCursor.getColumnIndex
                    
(android.provider.MediaStore.Audio.Media._ID);
            
int artistColumn musicCursor.getColumnIndex
                    
(android.provider.MediaStore.Audio.Media.ARTIST);
            
//
            
do {
                
long thisId musicCursor.getLong(idColumn);
                
String thisTitle musicCursor.getString(titleColumn);
                
String thisArtist musicCursor.getString(artistColumn);
                
songList.add(new Song(thisIdthisTitlethisArtist));
            }
            while (
musicCursor.moveToNext());
        }
    }
 
    @
Override
    
public boolean canPause() {
        return 
true;
    }
 
    @
Override
    
public boolean canSeekBackward() {
        return 
true;
    }
 
    @
Override
    
public boolean canSeekForward() {
        return 
true;
    }
 
    public 
int getAudioSessionId() {
        return 
0;
    }
 
    @
Override
    
public int getBufferPercentage() {
        return 
0;
    }
 
    @
Override
    
public int getCurrentPosition() {
        if(
musicSrv!=null && musicBound && musicSrv.isPng())
            return 
musicSrv.getPosn();
        else return 
0;
    }
 
    @
Override
    
public int getDuration() {
        
        if(
musicSrv!=null && musicBound && musicSrv.isPng())
            return 
musicSrv.getDur();
        else return 
0;
    }
 
    @
Override
    
public boolean isPlaying() {
        if(
musicSrv!=null && musicBound)
            return 
musicSrv.isPng();
        return 
false;
    }
 
    @
Override
    
public void pause() {
        
        
playbackPaused=true;
        
musicSrv.pausePlayer();
    }
 
    @
Override
    
public void seekTo(int pos) {
        
musicSrv.seek(pos);
    }
 
    @
Override
    
public void start() {
        
musicSrv.go();
    }
 
    
    private 
void setController(){
        
controller = new MusicController(this);
        
        
controller.setPrevNextListeners(new View.OnClickListener() {
            @
Override
            
public void onClick(View v) {
                
playNext();
            }
        }, new 
View.OnClickListener() {
            @
Override
            
public void onClick(View v) {
                
playPrev();
            }
        });
        
        
controller.setMediaPlayer(this);
        
controller.setAnchorView(findViewById(R.id.song_list));
        
controller.setEnabled(true);
    }
 
    
    private 
void playNext(){
        
musicSrv.playNext();
        if(
playbackPaused){
            
setController();
            
playbackPaused=false;
        }
        
controller.show(0);
    }
 
    
    private 
void playPrev(){
        
musicSrv.playPrev();
        if(
playbackPaused){
            
setController();
            
playbackPaused=false;
        }
        
controller.show(0);
    }
 
    @
Override
    
protected void onPause(){
        
super.onPause();
        
paused=true;
    }
 
    @
Override
    
protected void onResume(){
        
super.onResume();
        if(
paused){
            
setController();
            
paused=false;
        }
    }
 
    @
Override
    
protected void onStop() {
        
controller.hide();
        
super.onStop();
    }
 
    @
Override
    
protected void onDestroy() {
        
stopService(playIntent);
        
musicSrv=null;
        
super.onDestroy();
    }

پاسخ

قرار دادن دو کلاس در یک تابع (کدهای دو Activity) (برنامه نویسی اندروید)

#2
سلام.
در واقع منظور شما این است که کدهای دو Activity (که قبلا نوشته ایم) را این بار در یک Activity اجرا کنیم.
شما باید با ساختار کلاس Activity (چگونگی ساختار کدهای Activity) آشنایی داشته باشید. 

مثلا این شیوه کدنویسی غلط است :

کد پی‌اچ‌پی:
//--------------------- شروع دستورات اولین کلاس
public class MainActivity extends Activity implements MediaPlayerControl {
 
//-----------------------دستورات کلاس سنسور و دومین اکتیوتی
public class sensor extends Activity implements SensorEventListener 

شما باید تنها یک خط به این شکل داشته باشید و یک نام واحد برای Activity انتخاب کرده و کد را به شکلی بنویسید که هر دو interface با نام های MediaPlayerControl و SensorEventListener اجرا شوند :

کد پی‌اچ‌پی:
public class MyActivity extends Activity implements MediaPlayerControlSensorEventListener 

نکته دیگر اینکه مثلا شما دو بار روش onCreate را نوشته اید، در صورتی که باید کدهای این روش از آن دو Activity را در یک روش onCreate (در این Activity جدید) بنویسید.

با بررسی ساختار Activity و کدها و روش های موجود در آنها، می توانید این موارد را متوجه شوید :

http://www.kelidestan.com/keys/categorie...ategory=29

------------------------------------------------------

بنده بحث مربوط به Activity را کنار می گذارم و چون به بحث کلاس ها (Class) اشاره شد، این نکته را تذکر می دهم که اگر قصد داشتید مثلا کدهای دو کلاس را در یک کلاس جدید قرار بدهید، ابتدا method های (روش ها) اختصاصی هر کدام را در کلاس جدید قرار داده، بعد method های مشترک (با نام مشترک) را بررسی کنید که آیا باید ادغام گردند یا نام جدیدی برای یکی از آنها انتخاب شود و در کلاس جدید قرار گیرند. یا در صورتی که به محض ساخته شدن شیء (object) از روی هر کلاس، یک سری کد اجرا می شده، می توانید آنها را به صورت یک method در کلاس جدید بنویسید تا تنها زمانی که خواستیم توسط method اجرا شوند. دسته بندی زیر را ببینید :

http://www.kelidestan.com/keys/categorie...ategory=30

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط داش بهروز ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان