如何在导航抽屉中使用片段内的活动

时间:2014-04-11 09:52:16

标签: android nfc

我在片段中使用活动时遇到了问题。

我有两个活动,活动一个会使用意图将数据发送到两个。

活动一基本上是nfc扫描部分,标签信息是使用意图发送的,活动二将接收并显示信息。

我正在尝试将活动放在片段中并与导航抽屉UI一起使用。

我如何实现这一目标?

活动1代码:

 public class Activity2 extends Activity {

private NfcAdapter mAdapter;
private PendingIntent mPendingIntent;
private IntentFilter[] mFilters;
private String[][] mTechLists;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    mAdapter = NfcAdapter.getDefaultAdapter(this);        
    mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);        
    mFilters = null;
    mTechLists = null;  

    Intent intent = getIntent();       
    String action = intent.getAction();
    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) 
    {             
       onNewIntent(intent);
    }

}

@Override
protected void onResume() {
    super.onResume();

    mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);

}

@Override
public void onPause() {
    super.onPause();

    mAdapter.disableForegroundDispatch(this);
}


@Override
public void onNewIntent(Intent intent) {
    Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);

    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);                

    startnfcread(tag);
}

private void startnfcread(Tag tag){
    try {

        NfcV nfcv = NfcV.get(tag);
        if(nfcv != null){

            nfcv.connect();
            Intent newActivity = new Intent(this, Activity2.class);
            newActivity.putExtra("TagID", tag.getId()); 

    startActivity(newActivity);

            nfcv.close();
        }

    } catch (Exception e) {
        Log.e("NFC error", e.toString());
        Toast.makeText(this, "NFC failed", Toast.LENGTH_SHORT).show();
    }    
    }

活动2:

public class Activity2 extends Activity {

 private String displayID = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    setContentView(R.layout.results);

    TextView resultIdView = (TextView) findViewById(R.id.Tag_id);

    Bundle extras = getIntent().getExtras();        
    if(extras !=null)
    {
        byte[] TagID = extras.getByteArray("TagID");
        displayID = toHex(TagID);

        resultIdView.setText(displayID);                
    }
}   
}

我从http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/获取了导航抽屉示例。

有一个主抽屉活动和不同的片段,我如何使用这些片段的活动。当我从活动1扫描nfc标签时,它会将标签ID发送到活动2并显示标签ID。

相同的概念如何使用片段,例如来自fragment1扫描标签,并在片段2中显示标签ID。

库马尔

2 个答案:

答案 0 :(得分:0)

您应该阅读一些关于如何处理碎片的基本docsguides。 碎片非常类似于活动的生命周期回调,因此您应该能够快速转换代码 - 根据其复杂性。

简言之。创建一个Activity,它将服务器作为容器的片段(只是具有一些简单布局的基本Activity)。然后在此活动中使用FragmentManager将碎片添加到其中。您可以动态添加或删除片段活动,或者只显示/隐藏它们,这完全取决于您。谷歌有一些很好的例子和指南,应该为你提供良好的服务。 片段之间的通信可以再次使用Intents(参见getArguments()),自定义接口,您可以使用事件总线(请参阅Otto),...我将从Intents开始..

答案 1 :(得分:0)

您可以将Bundle传递给片段。

Bundle b = new Bundle();
b.putExtra("TagID", tag.getId());
FragmentVedioView fv = new FragmentVedioView();
fv.setArguments(b);
SFM.beginTransaction().replace(id, fv, "FragmentVedioView").commit();