Динамический переход на вкладку и одновременное изменение ее содержимого? - PullRequest
0 голосов
/ 18 ноября 2011

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

public static String mystring;
protected void onListItemClick (ListView l, View v, int position, long id){
    super.onListItemClick(l, v, position, id);
    mystring = listofHashMap.get(position).get("keyname").toString(); //it's ok here
    Intent intent=new Intent(this, MyActivity.class);
    startActivity(intent);
}

Приведенный выше код (помещенный в ListViewActivity) - это то, что я пробовал, и оно работает (но MyActivity больше не является содержимым табуляции, это полноэкранное автономное действие), имея следующий фрагмент кода в MyActivity:

tv = (TextView)findViewById(R.id.tvid);
lv = new ListViewActivity();
tv.setText(lv.mystring);

Но, как я уже сказал, я хочу, чтобы MyActivity был вкладкой, поэтому я попробовал это:

 public MyTabActivity taba = new MyTabActivity();
 protected void onListItemClick (ListView l, View v, int position, long id){
    super.onListItemClick(l, v, position, id);
    mystring = listofHashMap.get(position).get("keyname").toString();
    int i=1;//the tab where I want to go, and MyActivity is its content 
    taba.ChangeTab(i);
}

ChangeTab () - это статический метод в MyTabActivity (действие, расширяющее TabActivity), который просто выполняет setCurrentTab (i) .

Таким образом, MyActivity всегда будет отображать имя первого нажатого элемента, даже тогда я выбираю другие элементы в списке. Я верю, что мне нужно сделать setContent () снова для MyActivity или что-то сделать с этим static String mystring , я пробовал много решений, но безрезультатно. Я старался быть максимально точным в том, что я хочу сделать, помогите, пожалуйста, по этому вопросу.

1 Ответ

0 голосов
/ 18 ноября 2011

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

public MyTabActivity taba = new MyTabActivity();
protected void onListItemClick (ListView l, View v, int position, long id){
    super.onListItemClick(l, v, position, id);
    mystring = listofHashMap.get(position).get("keyname").toString();

    // create the intent to send and give it the data
    Intent i = new Intent("updateTextView");
    i.putExtra("textFromList", mystring);
    sendStickyBroadcast(i);

    int i=1;//the tab where I want to go, and MyActivity is its content 
    taba.ChangeTab(i);
}

А затем в MyActivity напишите что-то вроде этого:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // your onCreate method
    registerReceiver(updateTextReceiver, new IntentFilter("updateTextView"));
}

protected void onDestroy() {
    super.onDestroy();
    // your onDestroy method
    unregisterReceiver(updateTextReceiver);
}

private BroadcastReceiver updateTextReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        tv = (TextView)findViewById(R.id.tvid);
        String myString = intent.getStringExtra("textFromList");
        if (myString != null) {
            tv.setText(myString);
        }
    }

};

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

...