کلیدستان

نسخه‌ی کامل: مشکل در رفتن به اکتیویتی دیگر
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام. خسته نباشید.
من با برنامه eclipse تا الان 2 اکتیویتی ساختم که در داخل اکتیویتی اول چند دکمه قرار داره که عکس آنها رو پیوست کردم. همونطور که در عکس مشاهده می کنیم من 5 تا دکمه دارم که فقط تونستم با کلیک کردن بر روی دکمه با عنوان ((درباره)) به یک اکتیویتی دیگه منتقل بشم. ولی میخواستم از دکمه با عنوان ((بستکی)) به یک اکتیویتی دیگه برم که تمام مراحل رو انجام دادم ولی در موقع کد نویسی در MainActivity.java با مشکل برخورد کردم که خطای برنامه و کدها رو در عکس می بینید. الان میخوام یک راهنماییم کنه مشکل کار من کجا بوده؟ آیا من در کد نویسی اشتباه کرده ام یا اینکه کد باید به صورت دیگه ای نوشته می شد؟ من در زمینه کد نویسی مهارت زیادی ندارم فقط برای یک دکمه تونستم درست کنم ولی برای دکمه های دیگه با خطای عکس مواجه شدم. لطفا راهنمایی کنید.
 
سلام.
اولین مورد این است که شما دو تا دکمه (Button) با نام b ساخته اید که مجاز نیست و باید برای دکمه دوم، نامی متفاوت انتخاب کنید.
همچنین باید روش setOnClickListener را برای دکمه های مختلف، به طور جداگانه بنویسید.
الآن در کدهای مربوط به روش setOnClickListener که نوشته اید، دو بار از startActivity استفاده کرده اید که غلط است و تنها باید یکی باشد.
بنابراین با تعریف نام دکمه ها به صورت متفاوت و همچنین جداگانه به کار بردن روش  setOnClickListener برای آنها، می توان از این خطاها اجتناب کرد. شما کدهای یک دکمه را کامل بنویسید و سپس همان را در ادامه، copy و paste کنید و تنها نام دکمه و نام Activity که می خواهید کاربر به آن منتقل بشود را تغییر بدهید.
کدهای لازم برای رفتن کاربر به Activity جدید، با اشاره بر روی یک دکمه (Button)، در کلید زیر شرح داده شده است :

http://www.kelidestan.com/android/android-56.php

این الان کد MainActivity.java هست که این کد برای یک دکمه درست کار میکنه. و از MainActivity به second انتقال داده میشه:
package com.example.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b=(Button) findViewById(R.id.button2);
        b.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                startActivity(new Intent(MainActivity.this,second.class));

                
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}
الان من میخوام از activity_main.xml به اکتیویتی bastaki.xml با استفاده از button1 برم. الان من باید کد رو کجا و در چه قسمت وارد کنم. اگه امکان داره کد رو برام بنویسیدو
برایتان کلید زیر را نوشتم :

http://www.kelidestan.com/keys/keys.php?key=820

که در آن، چگونگی ساخت چند دکمه (Button) در یک Activity موجود در برنامه اندروید، شرح داده شده است (هر دکمه، کاربر را به یک Activity دیگر می برد).

 دوست عزیز دستتون درد نکنه بابت ساختن کد.
ولی من هرکاری می کنم setOnclickListener پیغام خطا میده. نمیدونم مشکل چیه
کد من الان با استفاده از کدهایی که شما گفتین اینه:
package com.example.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b=(Button) findViewById(R.id.button2);
        b.setOnClickListener(new OnClickListener() {

        Button b1=(Button) findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {
                         
     @Override
     public void onClick(View v) {
         startActivity(new Intent(MainActivity.this, bastaki.class));
     }
})
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                startActivity(new Intent(MainActivity.this,second.class));

                
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

کد شما ایراد داره هر دکمه رو باید جداگانه تعریف کنید
کد صحیح شما باید این باشه :

کد:
package com.example.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//----کد یک دکمه -----
Button b=(Button) findViewById(R.id.button2);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, bastaki.class));
}
});

// ------ کد یک دکمه دیگر ------
Button b1=(Button) findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
startActivity(new Intent(MainActivity.this,second.class));
}
});

}

}
من اون کدهایی که خودت زحمت ساختش رو کشیده بودی هم امتحان کردم. الان خطای setOnClickListener نمیده فقط در انتهای کد علامت { خطا داده و در ابتدای کار هم public class Activity1 extends Activity { علامته پیغام خطا داده و کد من الان به این صورت هستش:

کد پی‌اچ‌پی:
package com.example.dokmeh;

import com.example.dokmeh.R;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class 
Activity1 extends Activity {**********

    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.activity1);
        
Button b= (ButtonfindViewById(R.id.button1);
        
b.setOnClickListener(new OnClickListener() {
                         
     public 
void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity2.class));
     


Button b2 = (ButtonfindViewById(R.id.button2);
b2.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity3.class));
     }
});

Button b3 = (ButtonfindViewById(R.id.button3);
b3.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity4.class));
     }
});

Button b4 = (ButtonfindViewById(R.id.button4);
b4.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity5.class));
     }
});

Button b5 = (ButtonfindViewById(R.id.button5);
b5.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity6.class));
     }
     });

     }

     }********** 

این الان کد من هست و اونجاهایی که ستاره گذاشتم بدین منظور هست که پیغام خطاها الان در اینجاست
 
من پروژه خودم رو واسه شما پیوست کردم. لطفاً خودتون نگاه کنید. من الان همه چی رو پاک کردم فقط واسه دکمه درباره تعریف کردم که کار میکنه. ولی واسه دکمه های بستکی - بندری - عربی - ایرانی اگه شما بتونین براش کد بنویسید که با کلیک بر روی هر کدوم به یک اکتیویتی برن دیگه خیلی خیلی ممنونتون میشم. یه لطف بزرگی در حق ما کردین.
 
اینم لینک دانلود پروژه: http://s6.uplod.ir:182/d/2k23gbga4hvhuf6...kMusic.zip
 

 
کسی این مساله رو بررسی نکرد ببینه مشکل از کجاست. لطفا مشکل رو پیدا کنید. من تو این قسمت گیر کردم
همان مبحثی که نوشتم را یک بار دیگر با حوصله بخوانید.
نباید تنها کدها را کپی کنید، بلکه باید بدانید که دقیقا هر کد از چه بخش هایی تشکیل شده و چکار میکنه.
بررسی پروژه های کاربران و خطایابی به جای آنها، بی فایده است. شما باید خودتون خطایابی یاد بگیرید.
مثلا این بخش از کدهاتون رو ببینید :

کد:
Button b= (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
startActivity(new Intent(Activity1.this, Activity2.class));



Button b2 = (Button) findViewById(R.id.button2);
b2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
startActivity(new Intent(Activity1.this, Activity3.class));
}
});

شما وسط روش setOnClickListener ، یک دکمه جدید دیگر تعریف کردید که کاملا غلطه و نشون میده که ساختار کدهای مربوط به دکمه (Button) رو متوجه نشدید. منظورم بعد از startActivity اول است. این بخش از کدها رو باید حذف کنید :

کد:
Button b= (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
startActivity(new Intent(Activity1.this, Activity2.class));

وقتی علامت خطا در یک خط از برنامه نمایش داده میشه، دلیل بر این نیست که حتما آن خط غلط است، بلکه ممکن است بخش های دیگری از کد را غلط نوشته باشید که کل ساختار کدها غلط شده باشد. 

شما یک Activity جدید در پروژه اندروید خود بسازید و خوب به کدهای آن نگاه کنید تا متوجه بشوید که یک Activity ، در هنگام ساخت و بدون افزودن کدهای جدید، دقیقا ساختار کدهایش چگونه است.
بعد برید سراغ همان مبحثی که گفتم. دقیقا ببینید که کدهای یک دکمه (Button) چگونه است و کدهای چند دکمه، چگونه از تکرار آن ساخته می شود.

خوب این چیزی که شما میگید من وسط روش نوشتم. من تمام روش های دیگه هم امتحان کردم باز هم جواب نداد.کد:

کد:
Button b= (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {

Button b2 = (Button) findViewById(R.id.button2);
b2.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
startActivity(new Intent(Activity1.this, Activity2.class));

public void onClick(View v) {
startActivity(new Intent(Activity1.this, Activity3.class));
}
});

اینجوری هم من امتحان کردم ولی باز هم به جوابی نرسیدم
شما به حرف های من و آن دوستی که راهنماییتان کردند، گوش نمی دهید (کمی صبورانه تر کد بنویسید ). 
به هر حال، من چندین بار پاسخ دادم و سایر پاسخ های من نیز تکرار همان پاسخ ها می باشد. بنابراین، این نوشته، آخرین ارسال بنده در این موضوع می باشد.
موفق باشید.

خوب شما چیزی که میگید در حد حرفه ای ها میگید. بابا من تازه کارم. بلاخره از مطلبی که تو سایت خودتون هست هم من امتحان کردم. بلاخره یه جای کد اشتباه هست.
 
کد صحیح اینه :

کد پی‌اچ‌پی:
package com.example.dokmeh;

import com.example.dokmeh.R;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class 
Activity1 extends Activity {

    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.activity1);
        
Button b= (ButtonfindViewById(R.id.button1);
        
b.setOnClickListener(new OnClickListener() {
                         
     public 
void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity2.class));
     }
});


Button b2 = (ButtonfindViewById(R.id.button2);
b2.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity3.class));
     }
});

Button b3 = (ButtonfindViewById(R.id.button3);
b3.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity4.class));
     }
});

Button b4 = (ButtonfindViewById(R.id.button4);
b4.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity5.class));
     }
});

Button b5 = (ButtonfindViewById(R.id.button5);
b5.setOnClickListener(new OnClickListener() {
                         
     @
Override
     
public void onClick(View v) {
         
startActivity(new Intent(Activity1.thisActivity6.class));
     }
     });

     }

     }