片段中的空回收站视图

aphro19:

我有一个包含2个片段的活动

TriFragment.java用户输入一个输入并单击按钮Sort以对数字进行排序之后,输入的输入将被发送到第二个片段StepsFragmentmystepsList在Recyclerview中显示我che了一下,发现mystepsList即使在用户输入数据之前(创建活动时)还是空的,所以recyclerview没有显示任何内容

主要活动

public class Sorting_activity extends AppCompatActivity  implements StepsFragment.OnFragmentInteractionListener,TriFragment.TriFragmentListner{

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

    TriFragment tri = new TriFragment();

    FragmentManager manager=getSupportFragmentManager();
     manager.beginTransaction()
             .replace(R.id.triLayout,tri ,tri.getTag())
              .commit();

    StepsFragment steps= new StepsFragment();
    manager.beginTransaction()
            .replace(R.id.stepsLayout,steps ,steps.getTag())
            .commit();

}
@Override
public void onFragmentInteraction(Uri uri) { }

@Override
public void onInputsent(String input) {

    StepsFragment.setTextView(input);

}
}

步骤片段

public class StepsFragment extends Fragment  {

private OnFragmentInteractionListener mListener;

private static TextView inputEntred  ;
private RecyclerView RV ;
private Handler mhandler = new Handler();


public StepsFragment() {
    // Required empty public constructor
}
public static void setTextView(String textentered){
    inputEntred.setText(textentered);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

View view =inflater.inflate(R.layout.fragment_steps, container, false);
inputEntred  =view.findViewById(R.id.inputEntred);
String[] numberList = inputEntred.getText().toString().split(","); 
final Integer[] numbers = new Integer[numberList.length];

if(numberList.length !=0){
    // converting the strig array to an array of integers
    for (int i = 0; i < numberList.length; i++) {
        try {
        numbers[i] = Integer.parseInt(numberList[i]);
            }
        catch (NumberFormatException e){
            System.out.println("error is"+e);
        }
                                                 }
 SelectionSort m1 = new SelectionSort();
 ArrayList<String> mystepsList = m1.steps(numbers);// returns the steps numbers
 if(mystepsList.isEmpty()){
   System.out.println("empty list");
   }else {
     for (int i = 0; i < mystepsList.size(); i++)
          {
    System.out.println(mystepsList.get(i));
          }
                            }
    RV =view.findViewById(R.id.RV);
    final StepListAdapter adapter = new StepListAdapter() ;
    RV.setAdapter(adapter);

   LinearLayoutManager llm = new LinearLayoutManager(getActivity());
  RV.setLayoutManager(llm);

  adapter.setList(mystepsList);
            }
    return view;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        //   mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}
public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}

}

适配器

public class StepListAdapter extends RecyclerView.Adapter<StepListAdapter.StepListHolder> {
private ArrayList<String> etapes_list = new ArrayList<String>();


@NonNull
@Override
public StepListHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new StepListHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.log_item,parent,false));
}

@Override
public void onBindViewHolder(@NonNull StepListHolder holder, int position) {
    holder.etapes.setText(etapes_list.get(holder.getAdapterPosition()));
}

@Override
public int getItemCount() {
    return etapes_list.size();
}

public void setList(ArrayList<String>  etapes_list ){
    this.etapes_list= etapes_list;

    notifyDataSetChanged();
}

@Override
public long getItemId(int position) {
    return (null != etapes_list ? etapes_list.size() : 0);
}

public class StepListHolder extends RecyclerView.ViewHolder {
    TextView etapes ;
    public StepListHolder(@NonNull View itemView) {
        super(itemView);
        etapes =itemView.findViewById(R.id.txt_log);
    }
}

}

域:

因为您看到您正在设置StepsfragmentrecyclerViewin onCreateView方法,这意味着您的计算是在创建片段时完成的,而不是在您手动按下sort按钮时完成的。

以此方式修改片段,您的效果recyclerView会很好。

package com.example;

public class StepsFragment extends Fragment  {

private OnFragmentInteractionListener mListener;

private static TextView inputEntred  ;
private RecyclerView RV ;
private Handler mhandler = new Handler();


public StepsFragment() {
    // Required empty public constructor
}
public static void setTextView(String textentered){
    inputEntred.setText(textentered);

    //Set Your recyclerView Here.
    String[] numberList = inputEntred.getText().toString().split(",");
    final Integer[] numbers = new Integer[numberList.length];

    if(numberList.length !=0){
        // converting the strig array to an array of integers
        for (int i = 0; i < numberList.length; i++) {
            try {
                numbers[i] = Integer.parseInt(numberList[i]);
            }
            catch (NumberFormatException e){
                System.out.println("error is"+e);
            }
        }
        SelectionSort m1 = new SelectionSort();
        ArrayList<String> mystepsList = m1.steps(numbers);// returns the steps numbers
        if(mystepsList.isEmpty()){
            System.out.println("empty list");
        }else {
            for (int i = 0; i < mystepsList.size(); i++)
            {
                System.out.println(mystepsList.get(i));
            }
        }

        final StepListAdapter adapter = new StepListAdapter() ;
        RV.setAdapter(adapter);

        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        RV.setLayoutManager(llm);

        adapter.setList(mystepsList);
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

View view =inflater.inflate(R.layout.fragment_steps, container, false);
inputEntred  =view.findViewById(R.id.inputEntred);
    RV =view.findViewById(R.id.RV);

    return view;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
        //   mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}
public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}

是的,请尝试避免将Fragment中的数据设置方法设为静态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章