如何在不承载该片段的活动中刷新从 Listview 接收数据的片段中的 Textview

阿拉扎尔·科马尔

我创建了一个包含 5 个片段的底部导航栏,因此一旦单击每个选项卡,它将从一个片段切换到另一个片段。

问题是:第二个片段(搜索片段)有 1 个带有 setOnClickListener 的 TextView,因此一旦它被舔,一个布局活动将在顶部打开,其中包括一个 ListView 以允许用户选择/单击特定项目,以便稍后此选定项目信息应显示在(搜索片段)内的该 TextView 上。

问题是这个 Textview 不会更新,除非我调用 mainActivity 来更新底部导航栏中的所有片段

我的问题是如何在不调用 MainActivity 的情况下刷新该特定片段。

 public class MainActivity extends AppCompatActivity {



final Fragment f1 = new HomeFragment();
final Fragment f2 = new SearchFragment();
final Fragment f3 = new CameraFragment();
final Fragment f4 = new ChatFragment();
final Fragment f6 = new LogginFragment();

final FragmentManager fm = getSupportFragmentManager();
Fragment active = f1;

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



    BottomNavigationViewEx bnve = (BottomNavigationViewEx) findViewById(R.id.bottom_navigation);

    bnve.enableAnimation(false);
    bnve.enableShiftingMode(false);
    bnve.enableItemShiftingMode(false);
    bnve.setOnNavigationItemSelectedListener(navListener);

    if(SharePrefManager.getInstance(this).isLoggedin()){
        finish();
        startActivity(new Intent(this, SuccessActivity.class));
        return;
    }
    fm.beginTransaction().add(R.id.fragment_container, f6, "6").hide(f6).commit();
    //fm.beginTransaction().add(R.id.fragment_container, f5, "5").hide(f5).commit();
    fm.beginTransaction().add(R.id.fragment_container, f4, "4").hide(f4).commit();
    fm.beginTransaction().add(R.id.fragment_container, f3, "3").hide(f3).commit();
    fm.beginTransaction().add(R.id.fragment_container, f2, "2").hide(f2).commit();
    fm.beginTransaction().add(R.id.fragment_container, f1, "1").commit();



}



public BottomNavigationViewEx.OnNavigationItemSelectedListener navListener =
        new BottomNavigationViewEx.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {

                    case R.id.nav_home:
                        fm.beginTransaction().hide(active).show(f1).commit();
                        active = f1;
                        return true;

                    case R.id.nav_search:
                        fm.beginTransaction().hide(active).show(f2).commit();
                        active = f2;
                        return true;
                    case R.id.nav_camera:
                        fm.beginTransaction().hide(active).show(f3).commit();
                        active = f3;
                        return true;
                    case R.id.nav_chat:
                        fm.beginTransaction().hide(active).show(f4).commit();
                        active = f4;
                        return true;
                    case R.id.nav_account:
                        fm.beginTransaction().hide(active).show(f6).commit();
                        active = f6;
                        return true;

                }



                return false;

            }
        };

    }

------------------------SearchFragment 类------------------------ ----------

这是搜索片段,其中包含应该在不调用 MainActivity 的情况下更新/引用的 textView(类别)

public class SearchFragment extends Fragment  {


 private Context mContext;
 TextView Categories;


static boolean status = false;
String SelectedItem;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_search,container,false);
    Categories = (TextView) v.findViewById(R.id.categories);
    SelectedItem = DataHolder.getInstance().getItem();





        Categories.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(mContext, AllCateActivity.class));

            }
        });

        if(status){Categories.setText(SelectedItem);}


    return v;
}

public void ChangeStatus(Boolean status){

    this.status = status;
    }

@Override
  public void onAttach(Context context) {
    super.onAttach(context);
    mContext=context;
     }




 }

--------------------------DataHolder 类-------------- -----------

这作为一种设计模式在搜索片段和 Categories_Activity 之间共享参数

  public class DataHolder {

 private static DataHolder dataHolder = null;

 private DataHolder() {
     }

  public static DataHolder getInstance() {
if (dataHolder == null)
{
    dataHolder = new DataHolder();
}
return dataHolder;
 }


  private  String item;

 public String getItem() {
return item;
 }

public void setItem(String item) {
 this.item = item;
     }

 }

--------------------------Categories_Activity------------------------ ----------

此活动一旦被称为列表视图,将显示允许用户选择一个项目。因此,一旦选择了一个项目,它将启动 MainActivity 以刷新搜索片段中的文本字段

 public class Categories_Activity extends AppCompatActivity implements View.OnClickListener {

ImageView BacktoMainCate;
ListView subCate;
public String selectedItem;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab_subcategory);
    subCate = (ListView)findViewById(R.id.listview_subcate);
    BacktoMainCate = (ImageView)findViewById(R.id.BacktoMainCate);
    BacktoMainCate.setOnClickListener(this);

           final SearchFragment SF = new SearchFragment();
    subCate.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             selectedItem = String.valueOf(parent.getItemAtPosition(position));
            DataHolder.getInstance().setItem(selectedItem);
            SF.ChangeStatus(true);

  Intent in = new Intent(Categories_Activity.this,SuccessActivity.class);
                startActivity(in);

    });

}





@Override
public void onClick(View v) {

    if (v == BacktoMainCate){
        //startActivity(new Intent(this,AllCateActivity.class));
        finish();
    }




   }
}
阿拉扎尔·科马尔

我在 Fragment/Activity 生命周期中都使用了 SharedPreferences。

因此,一旦 Categories_Activity 启动,Main Activity 将进入 onPause,并且它的所有 Fragment 将被置于 onPause。当用户单击 Categories_Activity 中的 ListView 项目之一时,所选项目的数据将存储在 SharedPreferences 中,例如:

PreferenceManager.getDefaultSharedPreferences(Categories_Activity .this)
        .edit().putString(key, selectedItemInfo).apply();

然后在 MainActivity 和 SearchFragment 中覆盖 onResume() 方法:

@Override
public void onResume() {
super.onResume();
String value = PreferenceManager.getDefaultSharedPreferences(getContext())
        .getString(key, "");
if (value != null && !value.isEmpty()) {
    Categories.setText(value);
  PreferenceManager.getDefaultSharedPreferences(getContext()).edit().remove(key);
   }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ListView中更改TextView的文本

来自分类Dev

在Listview中更改Textview的颜色

来自分类Dev

在ListView中更改TextView的填充

来自分类Dev

如何在Listview中TextView的背景颜色

来自分类Dev

片段中缺少 TextView 数据(文本)

来自分类Dev

如何在片段中替换textView的文本

来自分类Dev

如何在片段中启动 TextView?

来自分类Dev

如何从TextView或ListView Android中获取文本?

来自分类Dev

ListView中TextView中的计数器

来自分类Dev

片段与列表片段中的ListView

来自分类Dev

片段与列表片段中的ListView

来自分类Dev

listview数据未显示在片段中

来自分类Dev

从ListView Android的5 TextView中仅可单击的4 TextView

来自分类Dev

如何从活动中更新对话框片段中的textview?

来自分类Dev

Android在ListView内的TextView中显示HTML

来自分类Dev

文本未显示在ListView的textview中

来自分类Dev

在Android中ListView的末尾动态添加Textview

来自分类Dev

在Android的ListView中添加多个TextView

来自分类Dev

在ListView中给TextView下划线

来自分类Dev

更改 ListView 中单个项目的 TextView

来自分类Dev

从ListView适配器更新片段TextView

来自分类Dev

片段中ListView的setOnItemClickListener

来自分类Dev

显示片段中的ListView

来自分类Dev

标签片段中的ListView

来自分类Dev

ViewPager片段中的ListView

来自分类Dev

片段中的Listview onitemclick

来自分类Dev

片段中实现listview

来自分类Dev

如何在ListView Items Android中动态添加TextView?

来自分类Dev

如何在Android的ListView中获取所有TextView值?