2016-07-28 3 views
0

Здравствуйте, я бы установил TextView в свою активность после нажатия кнопки «Сохранить». Я объясню. В моей деятельности у меня есть ListView:Измените TextView на ListView, когда нажмите save на Dialog

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

Когда я нажимаю на List Item, открыть диалог и передавать данные в диалоге :

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

EDIT
В моей AdapterJsonArray, который простирается BaseAdapter:

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 "выбран" и установить TextView часов с EditText скомпилирован в диалоге?

+0

Вы можете показать содержимое класса AdapterJsonArray? – Andolasoft

+0

Да, извините, я отредактирую – LorenzoBerti

ответ

0

Я нашел решение, но с моим небольшим опытом в разработке приложений, я не знаю, является ли это лучшим решением. Я нашел что-нить сказать: (ссылка нить: 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(); 
       } 
      } 
     }); 

надеюсь, что это поможет кому-то, что мало опыта, как я.

Смежные вопросы