6

Tôi có một hoạt động chính, bên trong có một đoạn với chế độ xem hình ảnh. Khi chế độ xem hình ảnh này được nhấp, một hoạt động mới bắt đầu có chứa chế độ xem danh sách. Tôi muốn trả lại vị trí (chỉ mục) mà người dùng nhấp vào chế độ xem danh sách này, quay lại đoạn.Làm cách nào để gửi dữ liệu từ một hoạt động đến phân đoạn gốc?

Fragment Mã

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); 
     } 

    } 
}  

Mã của Hoạt động được nhận được gọi là từ đoạn này. (ASK hoạt động)

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

Lưu vị trí này trong phầnPrafrences. – HassanUsman

+4

@HassanUsman NO! 'startActivityForResult' là trường hợp sử dụng thích hợp ở đây –

+0

bạn có thể làm bằng cách sử dụng startActivityfor Result –

Trả lời

0

Bạn có thể đạt được điều này bằng cách gọi/bắt đầu hoạt động mới có listview

bằng cách thay thế startActivity để startActivityForResult

và tiếp tục gửi bất kỳ dữ liệu trở lại để kêu gọi hoạt động phù hợp . Sau đó, xử lý nó với onActivityResult.

0

bạn phải sử dụng OnActivityResult như dưới đây

Trong Hoạt động chính Trong đó bạn có Fragments bạn phải viết như thế này

@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); 
} 

Sau đó, trong Fragment của bạn mà bạn muốn kết quả bạn phải viết như bên dưới

@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; 
     } 
    } 
} 

Và bạn phải đặt mã này mà trên đó nhấp chuột bạn muốn mở Hoạt động

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

sử dụng startActivityForResult

1. trong ASKFragment

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

2. vị trí đèo với ý định.

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. Các hoạt động từ nơi bạn đang thêm hoặc thay thế đoạn.

@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
Gửi giá trị từ Hoạt động để mảnh.
1) tạo hàm trong đoạn

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

2) từ Hoạt động gọi phương thức đoạn.

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

Cảm ơn, điều này đã giúp :) nhưng ở đây chỉ mục được biết đến với đoạn hoạt động đang nắm giữ. Làm thế nào để làm cho ASKFragment biết về giá trị chỉ số ?? @ Deepak –

+0

Vâng, tôi đã làm nó theo cùng một cách :) Cảm ơn rất nhiều đã giúp tôi :) –

Các vấn đề liên quan