我正在尝试从原始值获取枚举类型:
enum TestEnum: String {
case Name
case Gender
case Birth
var rawValue: String {
switch self {
case .Name: return "Name"
case .Gender: return "Gender"
case .Birth: return "Birth Day"
}
}
}
let name = TestEnum(rawValue: "Name") //Name
let gender = TestEnum(rawValue: "Gender") //Gender
Run Code Online (Sandbox Code Playgroud)
但似乎这rawValue对带空格的字符串不起作用:
let birth = TestEnum(rawValue: "Birth Day") //nil
Run Code Online (Sandbox Code Playgroud)
任何建议如何获得它?
我有这个项目结构的ArrayAdapter:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ... >
<TextView
android:id="@+id/itemTextView"
... />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
并添加此适配器,以便:
mAdapter = new ArrayAdapter<String>(this, R.layout.item,
R.id.itemTextView, itemsText);
Run Code Online (Sandbox Code Playgroud)
一切都很好,但我想更新适配器项目中的文本.我找到了解决方案
mAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
但不明白如何使用它.请帮忙.
UPD 我的代码:
String[] itemsText = {"123", "345", "567"};
ArrayAdapter<String> mAdapter;
Run Code Online (Sandbox Code Playgroud)
的onCreate
mAdapter = new ArrayAdapter<String>(this, R.layout.roomitem,
R.id.itemTextView, itemsText);
setListAdapter(mAdapter);
itemsText = {"789", "910", "1011"};
Run Code Online (Sandbox Code Playgroud)
的onClick
mAdapter.notifyDataSetChanged();
//it's dont work
Run Code Online (Sandbox Code Playgroud) 我有DrawView.如果我触摸此视图,则会绘制小圆圈.我不会画圆圈但不会触摸视图 - 使用帮助功能"setPoints".我所做的:
package com.samples;
import ...
public class DrawView extends View {
ArrayList<Point> points = new ArrayList<Point>();
Paint paint = new Paint();
private int pSize = 5;
private int pColor = Color.BLACK;
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.setOnTouchListener(this);
Point point = new Point();
point.x = event.getX();
point.y = event.getY();
points.add(point);
invalidate();
}
return true;
}
});
requestFocus();
}
@Override
public void onDraw(Canvas canvas) …Run Code Online (Sandbox Code Playgroud) 我写套接字客户端:
clientSocket = new Socket("192.168.1.102", 15780);
outToServer = new DataOutputStream(clientSocket.getOutputStream());
Run Code Online (Sandbox Code Playgroud)
一切都有效.但我不会发送到服务器UTF -8格式的消息,并这样做:
outToServer.writeBytes("msg#");//server tag
outToServer.writeUTF("hello");
//outToServer.writeUTF(str); //or another string
outToServer.writeBytes("\n");
outToServer.flush();
Run Code Online (Sandbox Code Playgroud)
消息变成这样:

请告诉我为什么?如何正确发送UTF消息?
我用libgdx在我的android设备上画火:
ParticleEffect effect;
ParticleEffectPool fireEffectPool;
Array<PooledEffect> effects = new Array<PooledEffect>();
@Override
public void create()
{
...
effect = new ParticleEffect();
effect.load(Gdx.files.internal("particles/fire01.p"), Gdx.files.internal("image"));
effect.setFlip(true, false);
fireEffectPool = new ParticleEffectPool(effect, 1000, 3000);
PooledEffect myEffect = fireEffectPool.obtain();
myEffect.setPosition(200, 400);
effects.add(myEffect);
...
}
Run Code Online (Sandbox Code Playgroud)
我可以通过编程方式旋转,设置速度或缩放效果吗?
我有一个非常简单的代码:
package com.example.conn08;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class MainActivity extends Activity
{
private static CustomHandler mHandler;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateUI();
}
private class CustomHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
MainActivity.this.updateUI();
}
public void sleep(long delayMillis)
{
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
private void updateUI()
{
mHandler.sleep(1000);
Log.v("updateUI", "kokoko");
}
}
Run Code Online (Sandbox Code Playgroud)
但在
MainActivity.this.updateUI();
Run Code Online (Sandbox Code Playgroud)
我知道了
此Handler类应该是静态的,否则可能会发生泄漏(com.example.conn08.MainActivity.CustomHandler)
为什么?请帮忙
编辑代码:
package com.example.conn08;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler; …Run Code Online (Sandbox Code Playgroud) 我画了一条画线:
//see code upd
Run Code Online (Sandbox Code Playgroud)
我需要制作移液器工具,它将从我的画布中获取颜色.我该怎么做?
代码更新:
private static class DrawView extends View
{
...
public DrawView(Context context) {
super(context);
setFocusable(true);
mBitmap = Bitmap.createBitmap(640, 860, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
this.setDrawingCacheEnabled(true);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
private void touch_up()
{
if(!drBool) //is true when I click pipette button
{
...
mCanvas.drawPath(mPath, mPaint); // lines draw
mPath.reset();
}else{
this.buildDrawingCache();
cBitmap = this.getDrawingCache(true);
if(cBitmap != …Run Code Online (Sandbox Code Playgroud) 在android java中,如果我想从非原始线程使用我的视图,我这样写:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String text = (String) msg.obj;
myTextView.setText(text);
}
};
Run Code Online (Sandbox Code Playgroud)
一切正常.但在xamarin C#中我写道:
Handler h = new Handler()
{
public override void HandleMessage (Message msg)
{
}
};
Run Code Online (Sandbox Code Playgroud)
并看到 invalid initializer member declarator
如何重装HandleMessage方法?我可以用其他方式从另一个线程中使用我的视图吗?
编辑:@AntP,这种方式在xamarin中不起作用:Only the original thread that created a view hierarchy can touch its views.但感谢您的支持.
解:
mActivity.RunOnUiThread(delegate
{
mTextView.Text = ("Test");
});
Run Code Online (Sandbox Code Playgroud) 假设我们有简单的枚举消息类型:
enum MessageType {
case audio
case photo
case text
}
Run Code Online (Sandbox Code Playgroud)
有一个Handler类只处理具有特定类型的消息:
class Handler {
let allowed: [MessageType]
init(_ allowed: [MessageType]) { self.allowed = allowed }
func canHandle(_ messageType: MessageType) -> Bool {
return allowed.contains(messageType)
}
}
Run Code Online (Sandbox Code Playgroud)
基本用法示例:
let handler = Handler([.audio, .photo])
print(handler.canHandle(.text)) // Prints false
Run Code Online (Sandbox Code Playgroud)
我想升级我的MessageType并为某些消息类型添加相关值.
class Audio {}
enum MessageType {
case audio(Audio)
case photo
case text
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法将枚举的模式存储在allowed数组中以供将来检入canHandle:
// error: '_' can only appear in a pattern or …Run Code Online (Sandbox Code Playgroud) 我尝试创建我的小粒子系统.我有粒子列表的粒子管理器,并在画布上绘制我的粒子.我只在init()函数中创建了一些像Paint等新对象!如果粒径<0,我将其删除:
for (int particle = 0; particle < particles.Count; particle++)
{
particles[particle].Update(); //particle size--;
if (!particles[particle].state) // size > 0 ? true : false
{
particles[particle] = null;
//here I tried all variations like
//((IDisposable)particles[particle]).Dispose();
//GC.SuppressFinalize(particles[particle]);
//System.GC.ReRegisterForFinalize(particles[particle]);
//((Java.Lang.Object)particles[particle]).Dispose(); and etc
particles.Remove(particles[particle]);
}
Run Code Online (Sandbox Code Playgroud)
然后我创建新的粒子并将其添加到我的列表中.我在日志中看到的内容:
GC cleanup summary: 1063 objects tested - resurrecting 1002.
GC cleanup summary: 1053 objects tested - resurrecting 992.
...
GC cleanup summary: 1052 objects tested - resurrecting 988.
46800 outstanding GREFs. Performing a full GC!
Run Code Online (Sandbox Code Playgroud)
然后我在渲染线程中有10-15(!!!)秒暂停!我阅读官方文档,但它没有任何解决方案.我分析并比较了我的代码与单声道JetBoy示例,但JetBoy的日志没有关于GC的任何内容.虽然我用JetBoy的例子编写了我的程序.如何修复完整的GC问题?
编辑:MainThread.cs …