将文本视图中的文本从listview项目从活动传输到对话框

时间:2014-02-26 19:03:48

标签: android listview android-listview

我正在撕裂我的头发,似乎无法让它发挥作用。我有一个具有列表视图的活动,该列表视图中的单行包含三个textview和一个imageview。我试图从单行中的一个textview中获取所有文本(只有一个),并在单击该项时将其放入我的自定义对话框的textview中。这是我的一个尝试:(当我点击列表视图中的项目时应用程序崩溃)

    mListView.setAdapter(adapter);
    ////Attempting Onclick method \\\\
        mListView.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id){

                String txt =((TextView)mListView.findViewById(R.id.title)).getText().toString();
                TextView dialogt = (TextView)findViewById(R.id.dialog_text);
                dialogt.setText(txt);
                confirmEvent();
            }
        });

如果我是Toast txt,我会得到正确的答案但是当我在列表中选择不同的项目时它永远不会改变。它只是永远存储它。 我的confirmEvent()方法实际上只是android开发者网站的自定义方法。但请告诉我是否应该发布它。

///// UPDATE ////

当我按照corsair992的建议更改mlistview进行查看时,Toast有效(请参阅下面的评论)但是当我尝试将该数据传输到对话框textview时,应用仍会崩溃。

下面的

是我的自定义对话框代码:

MyDialogFragment.java

public class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the Builder class for convenient dialog construction
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
 // Inflate and set the layout for the dialog
    // Pass null as the parent view because its going in the dialog layout
    builder.setView(inflater.inflate(R.layout.dialogb, null));
    builder.setMessage(R.string.dialog_Event)
           .setPositiveButton(R.string.add_to_cal, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // FIRE ZE MISSILES!
                   Toast.makeText(MyDialogFragment.this.getActivity(), "testing", Toast.LENGTH_LONG).show();
               }
           })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   // User cancelled the dialog
               }
           });
    // Create the AlertDialog object and return it

    return builder.create();
}
}

这是我的confirmEvent方法,它引用了上面的类:

public void confirmEvent() {
        DialogFragment mDialog = new MyDialogFragment();
        mDialog.show(getSupportFragmentManager(), "test");
    }

////更新///

logcat数据:

02-26 15:21:39.359:E / AndroidRuntime(746):致命异常:主要 02-26 15:21:39.359:E / AndroidRuntime(746):java.lang.NullPointerException 02-26 15:21:39.359:E / AndroidRuntime(746):at com.wordpress.yourhappening.happening.Homepage $ ListViewLoaderTask $ 1.onItemClick(Homepage.java:229) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.widget.AdapterView.performItemClick(AdapterView.java:284) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.widget.ListView.performItemClick(ListView.java:3382) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.widget.AbsListView $ PerformClick.run(AbsListView.java:1696) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.os.Handler.handleCallback(Handler.java:587) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.os.Handler.dispatchMessage(Handler.java:92) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.os.Looper.loop(Looper.java:123) 02-26 15:21:39.359:E / AndroidRuntime(746):在android.app.ActivityThread.main(ActivityThread.java:4627) 02-26 15:21:39.359:E / AndroidRuntime(746):at java.lang.reflect.Method.invokeNative(Native Method) 02-26 15:21:39.359:E / AndroidRuntime(746):at java.lang.reflect.Method.invoke(Method.java:521) 02-26 15:21:39.359:E / AndroidRuntime(746):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868) 02-26 15:21:39.359:E / AndroidRuntime(746):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 02-26 15:21:39.359:E / AndroidRuntime(746):at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

我认为带有“TextView”ID的dialog_text实际上包含在您dialogb中充气的“Dialog”布局中。如果是这种情况,那么您应该将此逻辑移动到实现此目的的DialogFragment

首先,您需要将文本值传递给DialogFragment。更改confirmEvent()方法以接受CharSequence参数,并将其作为参数传递给DialogFragment

public void confirmEvent(CharSequence text) {
    DialogFragment mDialog = new MyDialogFragment();
    Bundle args = new Bundle();
    args.putCharSequence("text", text);
    mDialog.setArguments(args);
    mDialog.show(getSupportFragmentManager(), "test");
}

然后在onCreateDialog()方法中更改以下行:

builder.setView(inflater.inflate(R.layout.dialogb, null));

到此:

View content = inflater.inflate(R.layout.dialogb, null);
TextView dialogt = (TextView) content.findViewById(R.id.dialog_text);
dialogt.setText(getArguments().getCharSequence("text"));
builder.setView(content);

或者您可以在setMessage()构建器上使用AlertDialog方法,而不需要在没有自定义的情况下在对话框上设置文本。

最后,删除onItemClick()回调中的对话文本设置逻辑,然后将文本传递给confirmEvent()方法。

我没有测试过这段代码,因此可能会出现一些语法错误或其他小问题,但这应该会为您提供一般性的想法。