Я занимаюсь разработкой мобильного приложения. особенно это приложение имеет много фрагмента. теперь проблема в том. Как деятельность, я не могу перезапустить или обновить фрагмент. давайте посмотрим на факт,
btr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String et = upc.getText().toString().trim();
if(!TextUtils.isEmpty(et)){
UpdateB( bid, et);
alertDialog.dismiss();
finish();
startActivity(getIntent());
}
else {
Toast.makeText(ShowBazarEntry.this,"Filed Empty!",Toast.LENGTH_SHORT);
}
}
});
}
Я беру около финиша (); и startActivity (getIntent ()); часть это перезапустить деятельность. но когда я хочу сделать то же самое во фрагменте, следуя процедуре, описанной ниже, это не работает.
btr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String et = upc.getText().toString().trim();
if(!TextUtils.isEmpty(et)) {
UpdateB(bid, et);
alertDialog.dismiss();
Fragment fragment = getFragmentManager().findFragmentByTag("ShowBazarEntry");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.detach(fragment);
transaction.attach(fragment);
transaction.commit();
}
else {
Toast.makeText(getActivity(),"Filed Empty!",Toast.LENGTH_SHORT);
}
}
});
}
Вот полный код класса Fragment.
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProviders;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.closeup.BazarList;
import com.example.closeup.Model.Bazar;
import com.example.closeup.R;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
public class ShowBazarEntry extends Fragment {
private ShowBazarEntryViewModel mViewModel;
ListView listViewBazars;
List<Bazar> bazarList;
DatabaseReference databaseBazars;
public static ShowBazarEntry newInstance() {
return new ShowBazarEntry();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.show_bazar_entry_fragment, container, false);
Button bt=(Button)view.findViewById(R.id.totalbutton);
final TextView testtotal=(TextView)view.findViewById(R.id.carry_totalcost);
databaseBazars= FirebaseDatabase.getInstance().getReference("BazarList");
listViewBazars=(ListView)view.findViewById(R.id.listview_bazar);
bazarList =new ArrayList<>();
//oncreate calling litsner for listview
databaseBazars.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
bazarList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Bazar bazar = ds.getValue(Bazar.class);
bazarList.add(bazar);
}
BazarList adapter = new BazarList(getActivity(), bazarList);
listViewBazars.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
//for update value
listViewBazars.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
Bazar bazar = bazarList.get(i);
showupdatedialog(bazar.getBid(),bazar.getDate());
return false;
}
});
databaseBazars.addListenerForSingleValueEvent (new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
bazarList.clear();
Integer total = 0;
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Bazar bazar = ds.getValue(Bazar.class);
Integer cost = Integer.valueOf(bazar.getCost());
total = total + cost;
bazarList.add(bazar);
}
Toast.makeText(getActivity(),"The total Is"+total,Toast.LENGTH_SHORT).show();
BazarList adapter = new BazarList(getActivity(), bazarList);
listViewBazars.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
}); ;
return view;
}
//function for update dialogue
private void showupdatedialog(final String bid, String da) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getLayoutInflater();
View dialogview = inflater.inflate(R.layout.updatedi, null);
dialogBuilder.setView(dialogview);
final EditText upc = (EditText) dialogview.findViewById(R.id.updatecost);
final Button btr = (Button) dialogview.findViewById(R.id.btnupdate);
dialogBuilder.setTitle("Udating Cost of Date " + da);
final AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
btr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String et = upc.getText().toString().trim();
if(!TextUtils.isEmpty(et)) {
UpdateB(bid, et);
alertDialog.dismiss();
Fragment fragment = getFragmentManager().findFragmentByTag("ShowBazarEntry");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.detach(fragment);
transaction.attach(fragment);
transaction.commit();
}
else {
Toast.makeText(getActivity(),"Filed Empty!",Toast.LENGTH_SHORT);
}
}
});
}
private boolean UpdateB(String id , String tp){
databaseBazars = FirebaseDatabase.getInstance().getReference("BazarList").child(id);
databaseBazars.child("cost").setValue(tp);
return true;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = ViewModelProviders.of(this).get(ShowBazarEntryViewModel.class);
// TODO: Use the ViewModel
}
}
еще несколько небольших советов было бы заметно. я борюсь с другой проблемой, я не могу установить значение 'total' в текстовом представлении testtotal.setText (total); эта процедура не работает. В результате происходит сбой. Итак, в итоге: 1, как я могу перезапустить фрагмент, пока выполняется обновление (что находится в функции showupdatedialogue ()) 2. Как я могу установить Text для View. Заранее спасибо.
вот бревенчатый кот. еще одна информация. данные обновляются до тех пор, пока я нахожусь в том же фрагменте, но если я перехожу к другому фрагменту, то еще раз попробуйте обновить данные, они получили сбой. но с Activity все в порядке с кодом, потому что когда он обновляет значение, он сразу же завершает работу (); и startActivity (getIntent ()); method.but во фрагменте я действительно не могу понять, как это сделать.
12-21 00:28:03.127 8212-8212/com.example.closeup I/Choreographer: Skipped 47 frames! The application may be doing too much work on its main thread.
12-21 00:28:16.758 8212-8212/com.example.closeup D/AndroidRuntime: Shutting down VM
12-21 00:28:16.761 8212-8212/com.example.closeup E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.closeup, PID: 8212
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
at com.example.closeup.BazarList.<init>(BazarList.java:26)
at com.example.closeup.ui.ShowBazarEntry.ShowBazarEntry$1.onDataChange(ShowBazarEntry.java:83)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.4:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.4:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.4:55)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5293)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].