2014-02-03 4 views
0

В соответствии с требованием у меня есть ListView с каждой строкой, содержащей несколько TextView s.Добавление и удаление текстовых полей в ListView динамически в Android

Я использую CustomAdapter. В зависимости от данных (исходящих от сервера) я должен удалить около TextViews и держать другие во время выполнения в каждой строке ListView. Удаленный TextViews должен быть , указанный в следующей строке в зависимости от данных.

Я пробовал View.Gone, но проблема все еще сохраняется.

Мой код:

public class CustomListViewFBOAdapter extends ArrayAdapter<XYZ> { 
Context context; 
List<XYZ> rowItem; 
    LinearLayout linearLayout; 

TextView a,b,c,d; 

Viewholder holder = null; 


public CustomListViewFBOAdapter(Context context, int resource, 
     List<XYZ> objects) { 

    super(context, resource, objects); 
    this.context = context; 
    this.rowItem = objects; 

} 

private class Viewholder { 
    TextView aValue; 
    TextView bValue; 
    TextView cValue; 
    TextView dVAlue; 
} 

@Override 
public int getCount() { 
    return rowItem.size(); 
} 

@Override 
public FBODetails getItem(int position) { 
    return rowItem.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return rowItem.indexOf(getItem(position)); 
} 

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

    XYZ item = (XYZ) getItem(position); 

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 

     convertView = inflater.inflate(R.layout.row, null); 

     linearLayout= (LinearLayout)convertView.findViewById(R.id.xmllayout); 

     a = (TextView)convertView.findViewById(R.id.a); 
     b = (TextView)convertView.findViewById(R.id.b); 
     c = (TextView)convertView.findViewById(R.id.c); 
     d = (TextView)convertView.findViewById(R.id.d); 

     holder = new Viewholder(); 


     holder.aValue= (TextView) convertView.findViewById(R.id.avalue); 
     holder.bValue= (TextView) convertView.findViewById(R.id.bValue); 
     holder.cvalue= (TextView) convertView.findViewById(R.id.cvalue); 
     holder.dvalue= (TextView) convertView.findViewById(R.id.dvalue); 

     convertView.setTag(holder); 

    } else { 

     holder = (Viewholder) convertView.getTag(); 

    } 




    if(item.getA().equals("$ 0.00")) 
    { 
     if(holder.aValue.getVisibility() == View.VISIBLE && a.getVisibility() == View.VISIBLE) 
     { 
      a.setVisibility(View.GONE); 
      holder.aValue.setVisibility(View.GONE); 
     } 
    } 
    else 
    { 
     holder.aValue.setVisibility(View.VISIBLE); 
     a.setVisibility(View.VISIBLE); 
     holder.aValue.setText(item.getA());  
    } 


    if(item.getB().equals("$ 0.00")) 
    { 
     if(holder.bValue.getVisibility() == View.VISIBLE && b.getVisibility() == View.VISIBLE) 
     { 
      b.setVisibility(View.GONE); 
      holder.bValue.setVisibility(View.GONE); 
     } 
    } 
    else 
    { 
     holder.bValue.setVisibility(View.VISIBLE); 
     b.setVisibility(View.VISIBLE); 
     holder.bValue.setText(item.getB());  
    } 

      if(item.getC().equals("$ 0.00")) 
    { 
     if(holder.cValue.getVisibility() == View.VISIBLE && c.getVisibility() == View.VISIBLE) 
     { 
      c.setVisibility(View.GONE); 
      holder.cValue.setVisibility(View.GONE); 
     } 

    } 
    else 
    { 
     holder.cValue.setVisibility(View.VISIBLE); 
     c.setVisibility(View.VISIBLE); 
     holder.cValue.setText(item.getC());  
    } 


      if(item.getD().equals("$ 0.00")) 
    { 
     if(holder.dValue.getVisibility() == View.VISIBLE && d.getVisibility() == View.VISIBLE) 
     { 
      d.setVisibility(View.GONE); 
      holder.dValue.setVisibility(View.GONE); 
     } 
    } 
    else 
    { 
     holder.dValue.setVisibility(View.VISIBLE); 
     d.setVisibility(View.VISIBLE); 
     holder.dValue.setText(item.getD());  
    }  


    return convertView; 
} 

} 

Спасибо за ваши ответы.

+0

отправьте свой код «CustomAdapter». –

ответ

0

Попробуйте помещать TextView a, b, c и d внутри вашего фактического макета и, следовательно, в ViewHolder. Затем проверьте их видимость (соответственно показать/скрыть). ИЛИ добавить динамически созданный TextView как @Nand. Также попробуйте установить теги для своих текстовых элементов, чтобы они сохраняли свое состояние даже после прокрутки.

Этот простой сниппет выполнил эту работу для меня.

public class MainActivity extends Activity { 

String s[] = {"Meme1","Meme2","Meme3","Meme4","Meme5"}; 
String s1[] = {"Meme1","Meme2","Meme3","Meme4","Meme5"}; 
MyAdapter adapter; 
ListView list; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    list = (ListView) findViewById(R.id.list); 
    adapter = new MyAdapter(getApplicationContext(), R.layout.layout,s); 
    list.setAdapter(adapter); 
} 



class MyAdapter extends ArrayAdapter<String> { 

    LayoutInflater inflater; 
     public MyAdapter(Context context, int resource, String [] data) { 
     super(context, resource, data); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if(convertView==null){ 
     inflater = LayoutInflater.from(getApplicationContext()); 
      convertView = inflater.inflate(R.layout.layout, null); 
      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.tv1.setText(s[position]); 
     holder.tv2.setText(s1[position]); 

     if(position == 1){ 
      holder.tv1.setVisibility(View.GONE); 
     }else if(position == 2){ 
      TextView tv = new TextView(getApplicationContext()); 
      tv.setText("Hello"); 
      holder.linear.addView(tv); 
     } 

     return convertView; 
    } 

    private class ViewHolder{ 
     TextView tv1, tv2; 
     LinearLayout linear; 

     public ViewHolder(View v) { 
      linear = (LinearLayout) v.findViewById(R.id.linear); 
      tv1 = (TextView) v.findViewById(R.id.textView1); 
      tv2 = (TextView) v.findViewById(R.id.textView2); 
     } 
    } 

    } 

} 
1

Чтобы добавить использовать код как

RelativeLayout relative = new RelativeLayout(getApplicationContext()); 
    TextView msgtxt= new TextView(getApplicationContext()); 
    TextView timetxt= new TextView(getApplicationContext()); 

    // Msg textview 
    RelativeLayout.LayoutParams paramsTxt = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 


    //msgtxt.setLayoutParams(paramsTxt); 
    msgtxt.setText(msgArrayList.get(pos)); 
    msgtxt.setTextSize(20); 
    msgtxt.setTextColor(getResources().getColor(R.color.white)); 
    msgtxt.setBackgroundResource(R.drawable.chats); 
    msgtxt.setPadding(35,10, 10, 10); 

    // RelativeLayout parent of msg textview 
    LinearLayout.LayoutParams relativeParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT); 
    relativeParams.weight=85; 
    //relative.setBackgroundResource(R.drawable.chats); 
    relative.addView(msgtxt,paramsTxt); 

И REMOVE:

relative.removeView(msgtxt); 
+0

любезно проверьте код, который я опубликовал. Я на правильном пути ...? –

1

Попробуйте этот код,

btnOrImage.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     // delete query fire here whatever related to requirements. 
     mList.remove(position);//you can delete your item here 
     notifyDataSetChanged(); 
    } 
}); 

Этот метод используется для notifyDataSetChanged() обновления для GetView() метод от вашего базового адаптера

+0

любезно проверьте код, который я опубликовал. Я на правильном пути ...? –

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