我有两节课。一个扩展FragmentActivity(MainActivity.java),另一个扩展Fragment(HomeFragment.java)。 我想要的是在MainActivity中创建一个图像按钮并将其放在home_fragment.xml中,然后更新HomeFragment.java,以便我的图像按钮永久保留在布局中。现在,我有一个按钮,将它添加到home_fragment.xml,并且工作正常,但是如果我离开该片段并返回它(通过单击按钮),该按钮就会消失。
这是我界面的图片。 home_fragment是带有" DriveDroid"的空白区域。里面的按钮。当我点击"按钮1"时启动它。如果我单击按钮2,3或4,则会激活另一个片段,如果我返回到"按钮1",打开home_fragment.xml,那么" DriveDroid"按钮消失了。
MainActivity正在运行一个单独的线程并在端口上侦听传入的图像。获得此图像后,它会创建一个以图像为背景的图像按钮。它将此图像按钮添加到xml布局(home_fragment)。这一切都正常工作,这是我对MainActivity的代码:
private void RepeatTask()
{
repeatTaskThread = new Thread()
{
public void run()
{
while (true)
{
try {
System.out.println("TRY_1");
Socket socket = new Socket("72.120.55.34", 5050);
// Get data sent through socket
DataInputStream DIS = new DataInputStream(socket.getInputStream());
System.out.println("DataInputStream Started");
// read data that got sent
String applicationName = DIS.readUTF();
// read array data for bitmap
int len = DIS.readInt();
byte[] data = new byte[len];
DIS.readFully(data, 0, data.length);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
final Drawable d = new BitmapDrawable(getResources(), bitmap);
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Log.d("tag_name", "Try_2");
ImageButton btn = new ImageButton(getApplicationContext());
//btn.setId(1);
btn.setBackgroundDrawable(d);
Log.d("tag_name", "Create Button" + btn);
ViewGroup RelativeLayout = (ViewGroup) findViewById(R.id.home_fragment);
btn.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
RelativeLayout.addView(btn);
Log.d("tag_name", "Button Added to View" + RelativeLayout);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
});
socket.close();
} catch (Exception e) {
System.out.println("Exception is "+e.toString());
}
try
{
// Sleep for 5 seconds
Thread.sleep(5000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
};
repeatTaskThread.start();
}
如何在HomeFragment中更新此图像按钮?这甚至是我应该做的事情吗?我只需要我的图像按钮,现在只要我的代码的其他部分在HomeFragment上调用就会出现。
以下是按下Button1时调用HomeFragment的方法(此代码位于另一个片段中):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fr_menu, container, false);
// get home image button
ImageButton Button1 = (ImageButton) view.findViewById(R.id.btnHOME);
// button listener
Button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, new HomeFragment()).commit();
}
});