Я сделал несколько простых фрагментов и знаю, что хочу обновить контент из другой ветки. Но я не знаю как.
Если бы я использовал простые фрагменты, я мог бы использовать интерфейс, но в моем случае это не работает, я думаю.
Я попытался использовать Bundle и обновить его в Sequene, но это работает только один раз, потому что я не знаю, как вызвать метод дважды.
Фрагмент
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
public class cf_Fragment_MainDriver1 extends Fragment {
public static final String ARGS_MainDriver1 = "ARGS_MainDriver1";
public static final String ARGS1_MainDriver1 = "ARGS1_MainDriver1";
c_Thread_Update_Fragent c_thread_update_fragent = new c_Thread_Update_Fragent();
private TextView tv_MainDriver1_counter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_cf_fragment_main_driver1, container, false);
Bundle args = getArguments();
String arg1 = Integer.toString(args.getInt(cf_Fragment_MainDriver1.ARGS_MainDriver1));
((TextView) root.findViewById(R.id.tv_MainDriver1)).setText(arg1);
tv_MainDriver1_counter = root.findViewById(R.id.tv_MainDriver1_counter);
updateData();
return root;
}
public void updateData(){
String x;
Bundle args = getArguments();
x = Integer.toString(args.getInt(cf_Fragment_MainDriver1.ARGS1_MainDriver1));
tv_MainDriver1_counter.setText(x);
}
}
Тема
package com.example.fragmentmanagermain;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.View;
import static android.content.ContentValues.TAG;
public class c_Thread_Update_Fragent extends Thread {
private static Fragment fi;
private Bundle args;
@Override
public void run() {
int i=0;
while (true)
{
try {
args.putInt(cf_Fragment_MainDriver1.ARGS1_MainDriver1, i);
fi.setArguments(args);
Log.d(TAG, "run: Works");
}catch (NullPointerException e){
Log.d(TAG, "run: Failed");
}
i++;
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void getFragment(Fragment f){
fi =f;
}
}
Главная
package com.example.fragmentmanagermain;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
c_PagerAdapter_Driver1 c_pagerAdapter_driver1;
c_PagerAdapter_Driver2 c_pagerAdapter_driver2;
c_Thread_Update_Fragent c_thread_update_fragent = new c_Thread_Update_Fragent();
ViewPager viewPager;
Button bt_Driver1;
Button bt_Driver2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_Driver1 = findViewById(R.id.bt_Driver1);
bt_Driver2 = findViewById(R.id.bt_Driver2);
c_pagerAdapter_driver1 = new c_PagerAdapter_Driver1(getSupportFragmentManager());
c_pagerAdapter_driver2 = new c_PagerAdapter_Driver2(getSupportFragmentManager());
viewPager = findViewById(R.id.MainPager);
viewPager.setAdapter(c_pagerAdapter_driver1);
c_thread_update_fragent.start();
bt_Driver1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment_Driver1();
}
});
bt_Driver2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment_Driver2();
}
});
}
private void setFragment_Driver1() {
viewPager.setAdapter(c_pagerAdapter_driver1);
}
private void setFragment_Driver2() {
viewPager.setAdapter(c_pagerAdapter_driver2);
}
}
Итак, мой вопрос в этом случае: как я могу использовать публичный метод updateData () из вторичного потока?