2016-03-19 160 views
0

我有叫了两个片段WiFiChatFragment,另一个是AboutUsFrag 所以,我想从WiFiChatFragment而是从溢出菜单项我已经执行调用AboutUsFrag但在替代方法 这里给出的错误是我WiFiChatFragment代码片段从片段

public class WiFiChatFragment extends Fragment { 
private View view; 
private ChatManager chatManager; 
private TextView chatLine; 
private ListView listView; 
public Animation hyperspaceJump; 
public AboutUsFrag fragment=null; 



public static final String TAG = "Settings"; 

ChatMessageAdapter adapter = null; 
private List<String> items = new ArrayList<String>(); 
Context context; 
private FragmentTransaction ft; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.fragment_chat, container, false); 
    chatLine = (TextView) view.findViewById(R.id.txtChatLine); 
    listView = (ListView) view.findViewById(android.R.id.list); 

    hyperspaceJump = AnimationUtils.loadAnimation(getActivity(), R.anim.animation_leave); 
    chatLine.startAnimation(hyperspaceJump); 



    setHasOptionsMenu(true); 

    adapter = new ChatMessageAdapter(getActivity(), android.R.id.text1, 
      items); 
    listView.setAdapter(adapter); 



    view.findViewById(R.id.btn_send).setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View arg0) { 
        if (chatManager != null) { 
         chatManager.write(chatLine.getText().toString() 
           .getBytes()); 
         pushMessage("Me: " + chatLine.getText().toString()); 
         chatLine.setText(""); 
         //chatLine.clearFocus(); 

        } 
       } 
      }); 


    return view; 



} 
public interface MessageTarget { 
    public Handler getHandler(); 
} 
public void setChatManager(ChatManager obj) { 
    chatManager = obj; 
} 
public void pushMessage(String readMessage) { 
    adapter.add(readMessage); 
    adapter.notifyDataSetChanged(); 
} 
/** 
* ArrayAdapter to manage chat messages. 
*/ 
public class ChatMessageAdapter extends ArrayAdapter<String> { 
    List<String> messages = null; 
    public ChatMessageAdapter(Context context, int textViewResourceId, 
           List<String> items) { 
     super(context, textViewResourceId, items); 

    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getActivity() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(android.R.layout.simple_list_item_1, null); 
     } 
     String message = items.get(position); 

     if (message != null && !message.isEmpty()) { 
      TextView nameText = (TextView) v 
        .findViewById(android.R.id.text1); 
      if (nameText != null) { 
       nameText.setText(message); 
       if (message.startsWith("Me: ")) { 
        nameText.setBackgroundResource(R.drawable.out_message_bg); 
        nameText.setTextAppearance(getActivity(), 
          R.style.normalText); 
       } else { 
        nameText.setBackgroundResource(R.drawable.in_message_bg); 
        nameText.setTextAppearance(getActivity(), 
          R.style.boldText); 
       } 
      } 
     } 
     return v; 
    } 
} 


@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    // TODO Auto-generated method stub 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.menu_main, menu); 


} 

public void replaceFragment(Fragment someFragment) { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.about_frag, someFragment); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // handle item selection 
    switch (item.getItemId()) { 
     case R.id.action_settings: 
      // do s.th. 
      return true; 

     case R.id.clean: 
      adapter.clear(); 
      return true; 

     case R.id.about_us: 
      fragment = new AboutUsFrag(); 
      replaceFragment(fragment); 

      return true; 
     case R.id.rating: 
      return true; 



     default: 


      return super.onOptionsItemSelected(item); 
    } 
} 




} 

,并呼吁AboutUsFrag

public class AboutUsFrag extends Fragment { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
    } 

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

     return inflater.inflate(R.layout.fragment_about_us, container, false); 
    } 

} 

另一个类我如何能实现呢?

+0

请告诉我在logcat中的错误。 –

+0

它给出错误的替换方法它不接受片段 –

+0

请直接从您的logcat发布错误。例如。什么是错误?什么是logcat告诉你? –

回答

0

检查导入部分。
您需要导入

import android.support.v4.app.Fragment 

我希望它的工作。

+0

评论后没有影响。 –

+0

请发布错误或崩溃报告。运行后出错 –

+0

错误:(199,17)错误:类WiFiChatFragment中的方法replaceFragment无法应用于给定的类型; 要求:片段 发现:AboutUsFrag 原因:实际参数AboutUsFrag不能通过方法调用转换被转换成片段 –

0

让刚刚尝试

import android.app.Fragment; 

和替换片段像这样

getFragmentManager().beginTransaction().replace(R.id.frame_container,frgment,"fragment_id").commit(); 
+0

再次它给错误等:致命异常:主 工艺:com.codes.asd.appshare,PID:10043 的java .lang.IllegalArgumentException:没有找到id为0x7f0d0055(com.codes.asd.appshare:id/about_frag)的片段AboutUsFrag {41cb6088#1 id = 0x7f0d0055} –

+0

你能告诉我这里fragment _id,那里已经有一个id了R.id.frame_container,所以哪个ID需要那里 –

+0

只是一个ID分配知道哪个片段被替换,这可以稍后使用它的ID(你可以在这里设置任何东西) – pratik