6

我有一个主要的活动,里面有一个图像视图的片段。点击此图像视图后,将启动一个包含列表视图的新活动。我想返回用户在这个列表视图上点击的位置(索引),回到片段。如何将数据从活动发送到其父代片段?

片段代码

package com.example.kedee.testgradle; 


import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class ASKFragment extends Fragment implements View.OnClickListener{ 
    private Context context; 
    private View rootView; 
    private int pos; 

    public ASKFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     rootView= inflater.inflate(R.layout.fragment_ask, container, false); 
     context=inflater.getContext(); 
     setListeners(); 
     return rootView; 
    } 

    void setListeners(){ 
     ImageView catIcon=(ImageView)rootView.findViewById(R.id.cat_icon); 
     catIcon.setOnClickListener(this); 



    } 

    @Override 
    public void onClick(View v) { 
     int vID=v.getId(); 
     if(vID==R.id.cat_icon){ 
      Intent intent=new Intent(getActivity(),ASK.class); 
      getActivity().startActivity(intent); 
     } 

    } 
}  

活动的代码,其正从该片段调用。 (ASK活动)

package com.example.kedee.testgradle; 

import android.app.Fragment; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class ASK extends AppCompatActivity { 
    private int index; 
    private String[] catNames= {"Acad","Emer","Tech","Exam","Station","Finance","Medical","Place","Sports" , 
      "Others" }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ask); 
     ListView listView=(ListView)findViewById(R.id.ask_cat_listView); 
     listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,catNames)); 
     listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> listView, View v, int pos, long id){ 
       index=pos; 
       //code to return back this index to the parent fragment? 
      } 
     }); 
    } 


} 
+0

将此位置保存到sharePrafrences。 – HassanUsman

+4

@HassanUsman不! 'startActivityForResult'在这里是合适的用例 –

+0

你可以使用startActivityfor结果 –

回答

0

你可以通过调用/开始有新的活动列表视图

实现这一目标通过更换startActivity到startActivityForResult

,并进一步发送任何数据传回相应的调用活动。然后,用onActivityResult处理它。

0

你必须使用OnActivityResult像下面

在主要活动中,你必须片段,你必须这样写

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode,resultCode,data); 
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.viewpager); 
    fragment.onActivityResult(requestCode, resultCode, data); 
} 

然后在您的片段要在其中产生你必须写下如下

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 


    if(resultCode == getActivity().RESULT_OK) { 

     switch(requestCode) { 

      case REQUEST_PICK_FILE: 

       if(data.hasExtra(FilePicker.EXTRA_FILE_PATH)) { 

        selectedFile = new File 
          (data.getStringExtra(FilePicker.EXTRA_FILE_PATH)); 
        tvFile.setText(selectedFile.getPath()); 

       } 
       break; 
     } 
    } 
} 

而且你必须把这个代码在其上单击要打开活动

 Intent intent = new Intent(getActivity(), FilePicker.class); 
    startActivityForResult(intent, REQUEST_PICK_FILE); 
4

使用startActivityForResult

1 ASKFragment

Intent intent=new Intent(getActivity(),ASK.class); 
getActivity().startActivityForResult(intent, 22 /* any other request code you want */); 

2.通行证位置意图。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> listView, View v, int pos, long id){ 
       index=pos; 
       Intent i = new Intent(); 
       i.putExtra("position", index); 
       setResult(RESULT_OK, i); 
       finish(); 
      } 
     }); 

3.从正在添加或替换片段的活性。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 22 && resultCode == RESULT_OK) { 
      // get the position from intent 
      if(data.getExtras()!=null && data.hasExtra("position")){ 
       int position = data.getExtras().getInt("position"); 
       // pass this position to fragment. 
      } 
     } 
    } 

EDIT
从活动发送的值以片段。
1)在从活动调用片段方法片段

public void getPositionOfList(int position){ 
    // here is the position 
} 

2)创建功能。

if (requestCode == 22 && resultCode == RESULT_OK) { 
       // get the position from intent 
       if(data.getExtras()!=null && data.hasExtra("position")){ 
        int position = data.getExtras().getInt("position"); 
        // pass this position to fragment. 
        ((ASKFragment)fragmentManager.findFragmentById(/*id of your container*/)).getPositionOfList(position); 
       } 
      } 
+0

谢谢,这有助于:)但是这里索引是活动持有片段已知的。如何让ASKFragment知道索引值? @Deepak –

+0

是的,我做了同样的方式:)非常感谢帮助我:) –

相关问题