2014-08-31 3 views
0

Я новичок в разработке Android и Java-программировании. Я пытаюсь создать отдельный класс без нового пользовательского интерфейса. Предположим, что у меня есть основное действие, в котором, если я нажму кнопку, он инициирует класс и вызовет метод в нем и отобразит текст в основном действии.создание отдельного класса без пользовательского интерфейса

Теперь я составить создал Основной вид деятельности и класс, который именуется как BluetoothOn: Пожалуйста, посмотрите на мой код:

Это является основным видом деятельности, где метод enablemyBluetooth является кнопкой мыши

public class MainActivity{ 
.... 

.... 
public void enablemyBluetooth(View view){    

    BluetoothOn ble = new BluetoothOn(); 
    ble.initializeBlue(); 
} 

} 

Теперь я создаю класс, в котором я планировал сделать все процессы здесь, не вмешиваясь в основное действие программы, например, он работает на фоне. Здесь, в моем коде, я просто хочу изменить Textview, но когда я запускаю на моем андроиде говорится, что, к сожалению, приложение остановилось.

public class BluetoothOn { 

private void initializeBlue(){ 

    textView1 =(TextView)findViewById(R.id.textView1); 
    textView1.setText(BleisOn); 
} 
} 

Обратите внимание, что я скомпилировал эту программу без ошибок/все переменные объявлены. Я попытался создать класс Bluetooth как закрытый в Main, и он работает. Я просто хочу создать его как другой класс в пакете для организации моего кода.

Действительно ли мне необходимо создать другое действие, если я хочу создать отдельный класс? Может ли кто-нибудь дать мне подсказки, что я должен делать или объявлять? Пожалуйста, помогите поблагодарить вас.

Обновление: благодарю вас за все ваши ответы, к сожалению, я не могу сделать этот простой процесс для работы над другим классом ... Я довольно новичок в Java и все еще изучаю свой путь. В любом случае, вот что я встретил ,

Я последовал за пост, предложенный unohu однако он дает мне ошибку на Майне, что «Метод initializeBlue() в тип BluetoothOn не применяется для аргументов.

Вот более полный код классы:

Основная деятельность:

public class MainActivity extends Activity { 

    public void enableBluetooth (View view){  

    BluetoothOn ble = new BluetoothOn(); 
    ble.initializeBlue(); // error on this part 

    }  

} 

BluetoothOn класс:

public class BluetoothOn{ 

     public TextView textView1; 

    public void initializeBlue(View myView){ 
     String BleisOn = "connect me now"; 

     textView1 = (TextView)myView.findViewById(R.id.textView1); 
     textView1.setText(BleisOn); 
    } 
} 

примечание: я получил опечатку на начальном посту, я объявил инициализацию как конфиденциальную, но она должна быть общедоступной. Я пытаюсь попробовать предложение luisdurazoa, но я не знаком с интерфейсом.

+0

Опубликуйте выходные данные логарифма. – csmckelvey

+0

Не каждому классу нужен макет. То, что вы ищете, - это вспомогательный класс. http://programmers.stackexchange.com/questions/132067/difference-between-a-service-class-and-a-helper-class – Slay

ответ

0

№ Нет. новый активность. Просто передайте объект view при вызове initializeBlue(). Используйте функцию (TextView) вместо вашего (FindViewById) (R.id.textView1) в приложении BluetoothOn.

public class MainActivity{ 

//Declare a textview 
private TextView textView; 

protected void onCreate(Bundle savedInstanceState) { 
..... 
    textView =(TextView)myView.findViewById(R.id.textView1); 
.... 
} 
.... 
public void enablemyBluetooth(View view){    

    BluetoothOn ble = new BluetoothOn(); 

    //Pass textview as argument 
    ble.initializeBlue(textView); 
    } 
} 

public class BluetoothOn { 

private void initializeBlue(View myView){ 

textView1 =(TextView)myView.findViewById(R.id.textView1); 
textView1.setText(BleisOn); 
    } 
} 
+0

Привет, я попытался выполнить ваше предложение, но я столкнулся с ошибкой. public void enableBluetooth (View view) { \t BluetoothOn ble = новый BluetoothOn(); ble.initializeBlue(); // Я получил ошибку здесь метод initializeBlue не применим для аргументов \t } – Nms03

+0

Обновлен ли частный void initializeBlue (View myView) вместо частного void initializeBlue() в BluetoothOn.java? –

+0

Спасибо за быстрый ответ. Да, я пробовал, я обновил свой пост. Пожалуйста, проверьте его ... Не знаю, где продолжить. – Nms03

2

Нет, совсем нет, вам не нужно иметь отдельную деятельность для этого, на самом деле ваш подход в порядке, за исключением того, что вы не должны создавать элементы интерфейса вне действия, например textview, но логика bluetooth в порядке, чтобы иметь его снаружи или подключения к базе данных и тому подобное.

Скорее всего, вы получите исключение, если попытаетесь инициализировать textView вне действия, вместо этого используйте интерфейс между вашим классом и вашей деятельностью.

public interface IBluetooth{ 
    public void initBluetooth(); 
} 

А потом ...

public class MainActivity implements IBluetooth{ 
.... 

.... 
public void enablemyBluetooth(View view){    

    BluetoothOn ble = new BluetoothOn(this); 
} 

} 

@Override 
initBluetooth(){ 
textView1 =(TextView)findViewById(R.id.textView1); 
textView1.setText(BleisOn); 
} 

Ваш класс Bluetooth ...

public class BluetoothOn { 

BluetoothOn(IBluetooth callback){ 
    //this will do the ui operations you need to do in the activity 
    callback.initBluetooth(); 
    //do your stuff here 
} 
} 
0

Метод findViewById(id) вызывается в деятельности и, как таковой, можно найти только мнения, которые принадлежат к разводке, что деятельность в.

Это означает, что вы не можете вызвать этот метод с идентификатором определенного вида в Activity, где этот вид не был объявлен.

Для того, чтобы иметь возможность получить вид из вашего BluetoothOn класса вы должны пройти активность в классе, а затем вызвать findViewById(id) метод:

MainActivity

public class MainActivity{ 
.... 

.... 
public void enablemyBluetooth(View view){    

    BluetoothOn ble = new BluetoothOn(this); 
    ble.initializeBlue(); 
} 

} 

BluetoothOn

public class BluetoothOn { 

    private void initializeBlue(Activity activity){ 

     textView1 =(TextView)activity.findViewById(R.id.textView1); 
     textView1.setText(BleisOn); 
    } 
} 
Смежные вопросы