2016-08-26 8 views
-2

Я создал customAdapter ListView. когда я нажимаю Button в ListView, я хочу управлять TextView за пределами ListView из разных макетов. Обратите внимание! Их нет в одном Java-коде.Как контролировать другие виды в разных сферах деятельности?

вот что я хочу сделать:

 viewHolder.plus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 


      TextView tx=(TextView) txt.findViewById(R.id.moneytext); 
       //find the textview outside listview (now In the same java code and xml) 

      totalmoney= (Integer.parseInt(tx.getText().toString()))+(Integer.parseInt(price[position])); 
      //get the textview integer and add to my present number 

      tx.setText(""+totalmoney); 
      //post on the textview 

     } 
    }); 
+0

Можете ли вы написать на доске классной комнаты из другого класса? № – JoelFernandes

+0

@JoelFernandes да, он может –

+0

@Maurice Liao Могу ли я спросить это наверняка, что «TextView» и «ListView» находятся в одной активности? –

ответ

1

Существует несколько способов сделать это я помню 3:

1) Добавить TextView к параметрам вашего ListView адаптера конструктора

2) Добавьте свой Activity в конструктор

3) Используйте решение на основе событий, такое как EventBus [Th это может быть использован даже ваш TextView и ListView в различной деятельности и не нужны параметры]

Существует пример 1 и 2:

public class YourListAdapter{ 

TextView strangerTextView; 
YourActivity yourActivity; 

public YourListAdapter(TextView strangerTextView,Activity yourActivity){ 
    //using one of them is enough 
    this.strangerTextView=strangerTextView; 
    this.yourActivity=yourActivity; 
} 
//when changing text use like 

strangerTextView.setText("Class Board"); 

//or (make sure you have global public textview attribute in your YourActivity class) 

yourActivity.textview.setText("Class Board"); 


} 

Для EventBus:

1) Создать класс, который содержит информацию о событии:

public class TextChangeEvent{ 
    public String newtext; 
    public TextChangeEvent(String newtext){ 
     this.newtext=newtext; 
    } 
} 

2) Затем в соответствующей деятельности:

@Override 
protected void onStart() { 
    super.onStart(); 
    if(!EventBus.getDefault().isRegistered(this))EventBus.getDefault().register(this); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    EventBus.getDefault().unregister(this); 

} 

@Subscribe 
public void onEvent(TextChangeEvent event) { 
    this.textView.setText(event.newtext) 
} 

3) Почтовые события, как, что, в любом месте вы хотите:

EventBus.getDefault().post(new TextChangeEvent("newtext")); 
+0

Ok thx I go try it –

+0

Наконец-то я положил их в same.java, решив проблему THx для вашего eventbus –

+0

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

-2

ли ваш TextView в одной и той же деятельности? Если да, то вы должны поставить

tx = (TextView) findViewById(R.id.moneytext); 

в OnCreate() метод, а затем получить доступ к нему от слушателя у вас есть:

tx.setText("" + totalmoney); 

Если это не в одной и той же деятельности, вы можете сделать что-то подобное :

public class ClassA extends Activity 
{ 
    public TextView textView; 

    public void onCreate() 
    { 
     super.onCreate(); 
     textView = (TextView) findViewById(R.id.moneytext); 
    } 
} 

public class ClassB extends Activity 
{ 
    ... 
     viewHolder.plus.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     //classA is a global variable that you get for example from contructor 
     tx = classA.textView; 

     totalmoney= (Integer.parseInt(tx.getText().toString()))+(Integer.parseInt(price[position])); 
     //get the textview integer and add to my present number 

     tx.setText(""+totalmoney); 
     //post on the textview 

    } 
}); 
    ... 
} 
+0

. Я установил адаптер, чтобы сделать customlistview и Textview в том же действии. Существует красная линия под надписью «super.onCreate()»; –