2014-12-20 2 views
1

Я пытаюсь передать переменную String из моей активности в свой созданный класс классов. Я попробовал Bundle, но он, похоже, не работает. Я хочу передать значение ввода EditText, называемого «destination» в моей MainActivity, в мой класс DrawView. То, что я пытаюсь достичь, зависит от ввода пользователя в классе активности, класс DrawView будет рисовать фигуры в другом положении. Любая помощь будет оценена.Передача переменной из действия в пользовательский созданный вид

Это код для моей деятельности класса

MainActivity.class

public class MainActivity extends ActionBarActivity { 
    static EditText destination = (EditText)findViewById(R.id.roomdinput); 
    String roomName; 
    //DrawView drawView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     final Button floorPlan = (Button)findViewById(R.id.floorPlanButton);   



floorPlan.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v){ 


    roomName = destination.getText().toString(); 
    Bundle myb = new Bundle(); 
    myb.putString("key", roomName); 
    Intent a = new Intent(MainActivity.this, DrawView.class); 
    a.putExtras(myb); 
    startActivity(a); 
    startActivity(new Intent("com.example.helloworld3.FLOORPLAN")); 



} 

}); 

    } 


    @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; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

И это код для моего DrawView класса

DraView.class

public class DrawView extends View { 
    Paint paint = new Paint(); 
    float ux, dx, rx,lx; 
    String roomName2; 
    Bundle myb2 ; 


    public DrawView(Context context) { 
     super(context); 
     paint.setColor(Color.RED); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
      canvas.drawLine(90, 250 , 90, 400, paint); 
      canvas.drawLine(20, 0, 0, 20, paint); 
      canvas.drawCircle(150, 400, 30, paint); 
    } 

} 
+0

Вы не можете использовать 'startActivity (...)' в ' start "класс, который расширяет' View'. Вам нужно либо передать данные в конструкторе вашего «DrawView», либо, если вам нужно регулярно его обновлять, создайте метод в классе «DrawView», который может использоваться для передачи данных в него и который затем отменяет/перерисовывает представление. – Squonk

ответ

4

As так как у вас есть DrawView расширен с View , вы можете просто использовать метод setTag для передачи объекта для просмотра. Почему бы не использовать эту полезную функцию?

SomeCustomObject obj = new SomeCustomObject(); 
myDrawView.setTag(obj); 

и в поле зрения вы можете получить тег, используя getTag метод.

SomeCustomObject = (SomeCustomObject)getTag(); 

Конечно, вы можете объявить метод или конструктор в вашем DrawView классе

Как

public class DrawView extends View { 
    SomeCustomObject obj ; 
    Paint paint = new Paint(); 
    float ux, dx, rx,lx; 
    String roomName2; 
    Bundle myb2 ; 
// Custom constructor 
public DrawView(Context context,SomeCustomObject object) { 
     this(context); 
     this.obj = object; 
    } 

// Custom method 
public void setObject(SomeCustomObject object) { 
    this.obj = object; 
} 
    public DrawView(Context context) { 
     super(context); 
     paint.setColor(Color.RED); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
      canvas.drawLine(90, 250 , 90, 400, paint); 
      canvas.drawLine(20, 0, 0, 20, paint); 
      canvas.drawCircle(150, 400, 30, paint); 
    } 

} 

Если у вас есть DrawView в другой деятельности, и вы хотите, чтобы передать данные в ней, во-первых, вы должен передать его через Intent, чем получить объект от намерения во втором действии, а затем передать этот объект вашему DrawView. Если вам нужен пример, просто скажите.

+0

Спасибо! Я попробую его – novice

+0

Почему вы определяете объект для передачи в качестве параметра метода конструктора и сеттера 'View'? Это все усложняет ситуацию - если вы посмотрите на код OP, они просто хотят передать «String». – Squonk

+0

Я предусмотрел два возможных способа сделать это, но, конечно, не используя их вместе. – CROSP

0

Просто позвоните объект вида и setContentView

drawView = new DrawView(this); 
setContentView(drawView); 

Кроме того, если вы хотите пройти parameters пройти через создание setter методов в вашем View

Смежные вопросы