我正在构建一个论坛-theh应用程序,并且需要以分层方式显示forumposts,以便人们可以轻松地看到哪些帖子正在响应(孩子们)哪个。每个forumpost都有自己的对象,该对象包含一个(int)深度变量,用于定义与其父对象相关的位置。
我有一个BroadcastReciever,它接收数据并根据数据设置listadapter。 我的计划现在是使用getListAdapter()。getChildAt(position).setLeft(pixels);每个条目的方法,但我在setLeft方法得到nullpointerexception。我的代码是:
@Override
public void onReceive(Context context, Intent intent) {
String jsonEmner = intent
.getStringExtra(RestService.PARAM_OUT_MSG);
emner = gson.fromJson(jsonEmner, EmneItem[].class);
Log.e(this.getClass().getSimpleName(), jsonEmner);
populateEmner();
int firstID = getListView().getFirstVisiblePosition();
int listSize = getListView().getCount();
for (int count = firstID; count < listSize; count++) {
EmneItem e = (EmneItem) getListView().getItemAtPosition(count);
getListView().getChildAt(count).setLeft(e.getDepth());
}
}
此代码位于ListFragment类中的BroadCastReciever方法内。我希望有人能指出我正确的方向如何做到这一点:)
答案 0 :(得分:1)
我觉得有点愚蠢回答我自己的问题,但我找到了一个解决方法,以防任何人遇到类似的情况。
我创建了自己的自定义ArrayAdapter,以及一个定义行布局的XML文件。 ArrayAdapter有一个getView()方法,允许你自定义每个条目,并根据我的条目“深度”变量,我设置textviews LayoutParams。
如果有人想看看它是如何完成的:
class CustomAdapter extends ArrayAdapter<EmneItem> {
CustomAdapter() {
super(getActivity(), R.layout.row, emner);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
//Reusing convertView if possible, if not then inflating a new
if(row == null) {
LayoutInflater inflater = getActivity().getLayoutInflater();
row = inflater.inflate(R.layout.row, parent, false);
}
TextView postedby = (TextView) row.findViewById(R.id.postedbytextview);
postedby.setText("Posted by: " + emner[position].getPosted_by());
TextView argument = (TextView) row.findViewById(R.id.argumentTextView);
argument.setText(emner[position].getArgument());
TextView procontratextview = (TextView) row.findViewById(R.id.procontratextview);
int procontra = emner[position].getProcontra();
if (procontra == EmneItem.PRO) {
procontratextview.setText("PRO");
}
if (procontra == EmneItem.CONTRA) {
procontratextview.setText("CONTRA");
}
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
if(emner[position].getDepth() == 1) {
llp.setMargins(10, 0, 0, 0);
procontratextview.setLayoutParams(llp);
argument.setLayoutParams(llp);
} else if (emner[position].getDepth() == 2) {
llp.setMargins(20, 0, 0, 0);
procontratextview.setLayoutParams(llp);
argument.setLayoutParams(llp);
} else if (emner[position].getDepth() == 3) {
llp.setMargins(30, 0, 0, 0);
procontratextview.setLayoutParams(llp);
argument.setLayoutParams(llp);
} else if (emner[position].getDepth() >= 4) {
llp.setMargins(40, 0, 0, 0);
procontratextview.setLayoutParams(llp);
argument.setLayoutParams(llp);
}
return (row);
}
}
这主要基于我在http://commonsware.com/Android/excerpt.pdf
找到的文章干杯