【发布时间】:2014-03-18 11:19:49
【问题描述】:
所以基本上我有一个片段类,我有一个 ImageView,我还没有设置任何图像。所以我想从我有列表的对话框中执行此操作,然后单击任何项目以将图像添加到 ImageView 所在的片段中。该图像是在 xml 文件中制作的矩形。如果我从它的类中添加它,它可以工作的 Fragment 类。但我需要它从对话框中添加它。
我尝试了一整天,但没有任何效果,我得到的只是 nullPointerException,在我尝试以我尝试的所有方式调用图像添加的同一个地方。
这是我尝试了很多之后得到的代码:)。
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.ImageView;
public class BrickMessageBoxGreen extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialog_title_green);
builder.setItems(R.array.greenBricks_array,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// The 'which' argument contains the index position
// of the selected item
Arkitektur ark = new Arkitektur();
ImageView img = (ImageView)ark.getView().findViewById(R.id.green_brick);
ark.addGreenBrick(img);
}
});
return builder.create();
}
}
这是我拥有 ImageView 的类:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.DragEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnDragListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class Arkitektur extends Fragment implements OnTouchListener, OnDragListener {
private int _xDelta;
private int _yDelta;
ViewGroup _root;
private View arkitektur;
ImageView greenBrick;
ImageView redBrick;
ImageView yellowBrick;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
arkitektur = inflater.inflate(R.layout.arkitektur, container, false);
//arkitektur.findViewById(R.id.green_brick).setOnTouchListener(this);
//greenBrick = (ImageView) arkitektur.findViewById(R.id.green_brick);
//arkitektur.findViewById(R.id.root).setOnDragListener(this);
//arkitektur.findViewById(R.id.bottom_container).setOnDragListener(this);
//addGreenBrick();
_root = (ViewGroup) arkitektur.findViewById(R.id.root);
_root.setOnDragListener(this);
return arkitektur;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
final int X = (int) event.getRawX()*2;
final int Y = (int) event.getRawY()*2;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) v.getLayoutParams();
layoutParams.leftMargin = X - _xDelta;
layoutParams.topMargin = Y - _yDelta;
// layoutParams.rightMargin = -250;
// layoutParams.bottomMargin = -250;
v.setLayoutParams(layoutParams);
break;
}
_root.invalidate();
return true;
}
@Override
public boolean onDrag(View v, DragEvent e) {
if (e.getAction()==DragEvent.ACTION_DROP) {
View view = (View) e.getLocalState();
ViewGroup from = (ViewGroup) view.getParent();
from.removeView(view);
LinearLayout to = (LinearLayout) v;
to.addView(view);
view.setVisibility(View.VISIBLE);
}
return true;
}
public void addGreenBrick(View v)
{
v.findViewById(R.id.green_brick).setOnTouchListener(this);
greenBrick = (ImageView) v.findViewById(R.id.green_brick);
greenBrick.setImageResource(R.drawable.green_brick);
}
}
谢谢!
【问题讨论】:
标签: android android-fragments android-imageview android-dialogfragment