2016-07-28 20 views
0

こんにちは私は、ダイアログボックスで保存をクリックした後、自分のアクティビティでTextViewを設定します。 私は説明します。私の活動の 私はListViewコントロールがあります。ダイアログボックスで保存をクリックするとListViewのTextViewが変更される

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

をそして私は、このリストビューのための「行」のレイアウトを持っている:私は、リストの項目をクリックすると

<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" 
    /> 

、私はダイアログを開き、ダイアログにデータを渡します:

<EditText 
    android:id="@+id/hourUser" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="numberDecimal" /> 
:私は私のダイアログを開くと

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を持っています

BaseAdapterを拡張して、私のAdapterJsonArrayでEDIT

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; 
} 

}

しかし、どのように私は、 "選択" し、ダイアログでコンパイルのEditTextとのTextViewの時間を設定し、リストビューの要素を設定することができますか?

+0

AdapterJsonArrayクラスの内容を表示できますか? – Andolasoft

+0

はい申し訳ありませんが、私は編集します – LorenzoBerti

答えて

0

私は解決策を見つけましたが、アプリ開発の経験はほとんどありませんが、それが最良の解決策かどうかはわかりません。ロマン・ガイは、GoogleのI/Oセッション中にしばらく前に説明したように、リストだけで1つのビューを更新するための最も効率的な方法を

: (Android ListView Refresh Single Rowリンクスレッド:) 私が言うのスレッドを見つけました

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; 
    } 

ターゲットは、アダプタの1つの項目であると仮定すると:ビューは(この1つは全体のビューデータを更新する)は、次のようなものです。

だから、私はダイアログ

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

そしてPositivebuttonリスナーでの私のListViewに合格しました:

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(); 
       } 
      } 
     }); 

は、私のような少し経験を持って、このヘルプ誰かを願っています。

関連する問題