Android 根据活动结果更新片段中的Listview。到处都找不到结果
我有一个活动和一个片段 在我的活动中,我在我的操作栏中有一个按钮,单击按钮时会弹出一个对话框,其中我有一个列表视图。 若我从该列表中选择了任何项目,那个么该数据将进入片段,并且基于该活动中的数据,应该显示我的片段列表视图 e、 g.如果我选择Technology,Technology id=1应该传入我的查询参数,并基于此显示我的片段listview。 每次我从列表中选择不同的项目时,我的片段列表视图都应该更新 但我的问题是,我没有在片段中获得任何数据,我的列表也没有得到更新 Mainactivity.javaAndroid 根据活动结果更新片段中的Listview。到处都找不到结果,android,listview,android-fragments,dialog,android-actionbar,Android,Listview,Android Fragments,Dialog,Android Actionbar,我有一个活动和一个片段 在我的活动中,我在我的操作栏中有一个按钮,单击按钮时会弹出一个对话框,其中我有一个列表视图。 若我从该列表中选择了任何项目,那个么该数据将进入片段,并且基于该活动中的数据,应该显示我的片段列表视图 e、 g.如果我选择Technology,Technology id=1应该传入我的查询参数,并基于此显示我的片段listview。 每次我从列表中选择不同的项目时,我的片段列表视图都应该更新 但我的问题是,我没有在片段中获得任何数据,我的列表也没有得到更新 Mainactiv
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem actionViewItem = menu.findItem(R.id.miActionButton);
// Retrieve the action-view from menu
View v = MenuItemCompat.getActionView(actionViewItem);
// Find the button within action-view
Button b = (Button) v.findViewById(R.id.btnCustomAction);
// Handle button click here
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(CUSTOM_DIALOG_ID);
}
});
return super.onPrepareOptionsMenu(menu);
}
@Override
public Dialog onCreateDialog(int id) {
Dialog dialog = null;
switch (id) {
case CUSTOM_DIALOG_ID:
dialog = new Dialog(this);
dialog.setContentView(R.layout.dialoglayout);
dialog.setTitle("Select Category");
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
}
});
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
}
});
// Prepare ListView in dialog
dialog_ListView = (ListView) dialog.findViewById(R.id.dialoglist);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listContent);
dialog_ListView.setAdapter(adapter);
dialog_ListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
// i = (int) parent.getItemIdAtPosition(position);
category_name = (String) parent.getItemAtPosition(position);
Log.d("category name", category_name);
if(category_name.equals("a"))
{
cat_id=1;
}
if(category_name.equals("b"))
{
cat_id=2;
}
if(category_name.equals("c"))
{
cat_id=3;
}
if(category_name.equals("d"))
{
cat_id=4;
}
if(category_name.equals("e"))
{
cat_id=5;
}
if(category_name.equals("f"))
{
cat_id=6;
}
Log.d("id",""+cat_id);
dismissDialog(CUSTOM_DIALOG_ID);
}
});
break;
}
return dialog;
}
public int getMyData() {
return cat_id;
}
@覆盖
公共布尔值OnPrepareOptions菜单(菜单){
MenuItem actionViewItem=menu.findItem(R.id.miActionButton);
//从菜单中检索操作视图
视图v=MenuItemCompat.getActionView(actionViewItem);
//在“操作”视图中查找按钮
按钮b=(按钮)v.findViewById(R.id.btnCustomAction);
//把手按钮点击这里
b、 setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
showDialog(自定义对话框ID);
}
});
返回super.onPrepareOptions菜单(菜单);
}
@凌驾
公共对话框onCreateDialog(int-id){
Dialog=null;
开关(id){
案例自定义对话框\u ID:
dialog=新建对话框(此对话框);
setContentView(R.layout.dialoglayout);
对话框.setTitle(“选择类别”);
对话框。可设置可取消(true);
对话框。setCanceledOnTouchOutside(true);
setOnCancelListener(新的OnCancelListener(){
@凌驾
public void onCancel(对话框接口对话框){
}
});
setOnDismissListener(新的OnDismissListener(){
@凌驾
公共void onDismiss(对话框接口对话框){
//TODO自动生成的方法存根
}
});
//在对话框中准备ListView
dialog_ListView=(ListView)dialog.findviewbyd(R.id.dialoglist);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,listContent);
对话框_ListView.setAdapter(适配器);
对话框\u ListView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
//i=(int)parent.getItemIdAtPosition(position);
category_name=(字符串)parent.getItemAtPosition(位置);
Log.d(“类别名称”,类别名称);
if(类别名称等于(“a”))
{
cat_id=1;
}
if(类别名称等于(“b”))
{
cat_id=2;
}
if(类别名称等于(“c”))
{
cat_id=3;
}
if(类别名称等于(“d”))
{
cat_id=4;
}
if(类别名称等于(“e”))
{
cat_id=5;
}
if(类别名称等于(“f”))
{
cat_id=6;
}
Log.d(“id”和“+类别id”);
dismissDialog(自定义对话框ID);
}
});
打破
}
返回对话框;
}
public int getMyData(){
返回cat_id;
}
Fragment.java:
public String param;
public String url;
public int cat_id;
Mainactivity activity = (Mainactivity) getActivity();
int myDataFromActivity = activity.getMyData();
cat_id = myDataFromActivity;
Log.d("Category_id", "" + cat_id);
Map<String, String> map1 = new HashMap<String, String>();
param = "?cat_id=" + cat_id;
//URL is fake , original url is working fine.
url = "http://www.abbcd.com/xyz/webservices/data/getAllData.php"
+ param;
map1.put("url", url);
new MultiPartRequester(mainActivity, map1,
NetUtils.RequestCode.GET_ALL_DATA,
this).execute();
公共字符串参数;
公共字符串url;
公共int cat_id;
Mainactivity=(Mainactivity)getActivity();
int myDataFromActivity=activity.getMyData();
cat_id=myDataFromActivity;
Log.d(“类别id”,“类别id+类别id”);
Map map1=新的HashMap();
param=“?cat_id=“+cat_id”;
//URL是假的,原始URL工作正常。
url=”http://www.abbcd.com/xyz/webservices/data/getAllData.php"
+param;
map1.put(“url”,url);
新的多部分请求程序(mainActivity、map1、,
NetUtils.RequestCode.GET_所有数据,
这是一个)execute();
更新部分:
@Override
public void updateFragmentList(int catId) {
// TODO Auto-generated method stub
param = "?cat_id=" + catId;
url = "http://www.abbcd.com/xyz/webservices/data/getAllData.php"+ param;
Map<String, String> map1 = new HashMap<String, String>();
map1.put("url", url);
new MultiPartRequester(mainActivity, map1,
NetUtils.GET_DATA, this)
.execute();
}
@覆盖
公共void更新标记列表(int catId){
//TODO自动生成的方法存根
param=“?cat_id=“+catId;
url=”http://www.abbcd.com/xyz/webservices/data/getAllData.php“+param;
Map map1=新的HashMap();
map1.put(“url”,url);
新的多部分请求程序(mainActivity、map1、,
NetUtils.GET_数据,此)
.execute();
}
在活动中使用静态全局变量
public static int cat_id = 0;
在下面的片段中访问
cat_id
Map<String, String> map1 = new HashMap<String, String>();
param = "?cat_id=" + activity.cat_id;
编辑: 另一种方法最终起作用了,从activity ans pass
cat_id
in方法调用片段方法。使用片段名称,而不是ExampleFragment
在活动中使用静态全局变量
public static int cat_id = 0;
访问
c
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.mymethod(cat_id);
public interface FragmentListener {
void updateFragmentList(int catId);
}
public class MyFragment extends Fragment implements MainActivity.FragmentListener
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
((MainActivity) getActivity()).setFragmentListener(this);
}
public void setFragmentListener(FragmentListener listener)
{
this.fragmentListener = listener;
}
public void sendDataToFragment(int catId) {
this.fragmentListener.updateFragmentList(catId);
}
public void updateFragmentList(int catId){
//Here update your listview with cat id
}