【问题标题】:Modify TextView on ListView when click save on Dialog单击对话框上的保存时修改 ListView 上的 TextView
【发布时间】:2016-07-28 16:09:41
【问题描述】:

您好,我会在对话框中单击保存后在我的活动中设置一个 TextView。 我会解释的。 在我的活动中,我有一个 ListView:

<ListView
        android:id="@+id/activityList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="15dp" />

我为这个 ListView 设置了一个“行”布局:

<TextView
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@android:color/black"
    android:padding="8dp"
    />
<TextView
    android:id="@+id/hours"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@android:color/black"
    android:padding="8dp"
    />

当我点击列表项时,我打开对话框并将数据传递给对话框:

 private void createListActivities(){
    AdapterJsonArray adapterActivities = new AdapterJsonArray(ReceiptsActivity.this, datas);
    ListView listView = (ListView)findViewById(R.id.activityList);
    assert listView != null;
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            try {
                JSONObject data = datas.getJSONObject(position);
                openDialogReceipt(data);
            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    });
    listView.setAdapter(adapterActivities);


}

private void openDialogReceipt(final JSONObject activity) throws JSONException {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(Activity.this);
    LayoutInflater inflater = Activity.this.getLayoutInflater();
    final View dialogView = inflater.inflate(R.layout.dialog_receipt_activity, null);
    alertDialog.setView(dialogView);


    alertDialog.setTitle("Time");
    alertDialog.setMessage(activity.getString("property"));
    alertDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            try {
                /** get Text hour */
                EditText hour = (EditText)dialogView.findViewById(R.id.hourUser);
                assert hour != null;

               // in this point I have to pass data to activity  Item clicked in ListView

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
    alertDialog.setNegativeButton("Cancella", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            //pass
        }
    });
    AlertDialog b = alertDialog.create();
    b.show();
}

当我打开我的对话框时,我有一个 editText:

<EditText
    android:id="@+id/hourUser"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="numberDecimal" />

编辑
在我扩展 BaseAdapter 的 AdapterJsonArray 中:

public class AdapterJsonArray extends BaseAdapter implements ListAdapter {

private final Activity activity;
private final JSONArray jsonArray;
public AdapterJsonArray(Activity activity, JSONArray jsonArray) {
    assert activity != null;
    assert jsonArray != null;

    this.jsonArray = jsonArray;
    this.activity = activity;
}

@Override
public int getCount() {
    return jsonArray.length();
}

@Override public JSONObject getItem(int position) {

    return jsonArray.optJSONObject(position);
}

@Override
public long getItemId(int position) {
    JSONObject jsonObject = getItem(position);

    return jsonObject.optLong("id");
}




@Override public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v;
    if (convertView == null) {
        v = inflater.inflate(R.layout.list_view_activities, null);
    } else {
        v = convertView;
    }
    TextView description = (TextView) v.findViewById(R.id.text);
    try {
        description.setText(jsonArray.getJSONObject(position).getString("property"));
    } catch (JSONException e) {
        e.printStackTrace();
    }
    // questionable logic

    return v;
}

}

但是如何设置 listView 的元素“已选择”并使用对话框中编译的 EditText 设置 TextView 小时?

【问题讨论】:

  • 能显示AdapterJsonArray类的内容吗??
  • 是的对不起,我会编辑

标签: android listview dialog


【解决方案1】:

我找到了一个解决方案,但是我在应用程序开发方面的经验很少,我不知道这是否是一个最佳解决方案。 我发现一个线程说: (链接线程:Android ListView Refresh Single Row

正如 Romain Guy 不久前在 Google I/O 会议期间所解释的那样,仅更新列表视图中的一个视图的最有效方法如下(这个更新整个视图数据):

ListView list = getListView();
int start = list.getFirstVisiblePosition();
for(int i=start, j=list.getLastVisiblePosition();i<=j;i++)
    if(target==list.getItemAtPosition(i)){
        View view = list.getChildAt(i-start);
        list.getAdapter().getView(i, view, list);
        break;
    }

假设目标是适配器的一项。

所以,我已经在对话框中传递了我的 ListView

private void openDialogReceipt(final JSONObject activity, final ListView listView) throws JSONException { ... }

在 Positivebutton 监听器中:

alertDialog.setPositiveButton("Salva", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {


                try {
                    /** get Text hour it's the textView that i would populate */
                    EditText hour = (EditText)dialogView.findViewById(R.id.hour);

                    assert hour != null;
                 int start = listView.getFirstVisiblePosition();
                    for(int i=start, j=listView.getLastVisiblePosition();i<=j;i++)
                        if(activity==listView.getItemAtPosition(i)){
                            View view = listView.getChildAt(i-start);
                            listView.getAdapter().getView(i, view, listView);
                            TextView hoursText = (TextView) view.findViewById(R.id.hours);
                            hoursText.setText("textToUpdate");
                            break;
                        }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

希望这可以帮助像我这样没有经验的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多